第二章:基础语法
📅 2026/7/17 10:48:28
👁️ 阅读次数
📝 编程学习
第二章:基础语法
2.1 变量声明
显式声明
packagemainimport"fmt"funcmain(){// 方式1:var关键字声明varnamestring="张三"varageint=25varheightfloat64=1.75varisStudentbool=truefmt.Printf("姓名: %s, 年龄: %d, 身高: %.2f, 是否学生: %v\n",name,age,height,isStudent)// 方式2:类型推断varcity="北京"// 自动推断为stringvarpopulation=2100// 自动推断为intfmt.Printf("城市: %s, 人口: %d万\n",city,population)// 方式3:批量声明var(firstNamestring="小"lastNamestring="明"scoreint=95)fmt.Printf("全名: %s%s, 分数: %d\n",firstName,lastName,score)}短变量声明(:=)
packagemainimport"fmt"funcmain(){// 短变量声明,只能在函数内部使用name:="李四"age:=30salary:=15000.50isMarried:=falsefmt.Printf("姓名: %s, 年龄: %d, 薪资: %.2f, 已婚: %v\n",name,age,salary,isMarried)// 多变量同时声明x,y,z:=1,2,3fmt.Printf("x=%d, y=%d, z=%d\n",x,y,z)// 交换变量值x,y=y,x fmt.Printf("交换后: x=%d, y=%d\n",x,y)}常量
packagemainimport"fmt"// 单个常量constPI=3.14159265358979// 批量常量const(StatusOK=200StatusNotFound=404StatusError=500)// iota枚举const(Sunday=iota// 0Monday// 1Tuesday// 2Wednesday// 3Thursday// 4Friday// 5Saturday// 6)// iota表达式const(_=iota// 忽略第一个值KB=1<<(10*iota)// 1 << 10 = 1024MB// 1 << 20 = 1048576GB// 1 << 30 = 1073741824TB// 1 << 40)funcmain(){fmt.Printf("PI = %.4f\n",PI)fmt.Printf("HTTP状态码: OK=%d, NotFound=%d, Error=%d\n",StatusOK,StatusNotFound,StatusError)fmt.Printf("今天是星期: %d\n",Wednesday)fmt.Printf("1KB = %d字节\n",KB)fmt.Printf("1MB = %d字节\n",MB)fmt.Printf("1GB = %d字节\n",GB)}2.2 数据类型
基本数据类型
packagemainimport("fmt""unsafe")funcmain(){// 整数类型vari8int8=127// -128 到 127vari16int16=32767// -32768 到 32767vari32int32=2147483647// -2^31 到 2^31-1vari64int64=9223372036854775807varu8uint8=255// 0 到 255varu16uint16=65535// 0 到 65535fmt.Printf("int8: %d, 大小: %d字节\n",i8,unsafe.Sizeof(i8))fmt.Printf("int16: %d, 大小: %d字节\n",i16,unsafe.Sizeof(i16))fmt.Printf("int32: %d, 大小: %d字节\n",i32,unsafe.Sizeof(i32))fmt.Printf("int64: %d, 大小: %d字节\n",i64,unsafe.Sizeof(i64))fmt.Printf("uint8: %d, 大小: %d字节\n",u8,unsafe.Sizeof(u8))fmt.Printf("uint16: %d, 大小: %d字节\n",u16,unsafe.Sizeof(u16))// 浮点类型varf32float32=3.14varf64float64=3.14159265358979fmt.Printf("float32: %.2f, 大小: %d字节\n",f32,unsafe.Sizeof(f32))fmt.Printf("float64: %.14f, 大小: %d字节\n",f64,unsafe.Sizeof(f64))// 复数类型varc1complex64=1+2ivarc2complex128=3+4ifmt.Printf("complex64: %v\n",c1)fmt.Printf("complex128: %v\n",c2)fmt.Printf("实部: %.0f, 虚部: %.0f\n",real(c2),imag(c2))// 布尔类型varb1bool=truevarb2bool=falsefmt.Printf("bool: %v, %v\n",b1,b2)// 字节类型 (uint8的别名)varchbyte='A'fmt.Printf("byte: %c, ASCII: %d\n",ch,ch)// Unicode字符类型varrrune='中'fmt.Printf("rune: %c, Unicode: %U\n",r,r)}字符串类型
packagemainimport("fmt""strings""unicode/utf8")funcmain(){// 字符串声明s1:="Hello, 世界"s2:=`这是一个 多行字符串`fmt.Println(s1)fmt.Println(s2)// 字符串长度fmt.Printf("字节长度: %d\n",len(s1))fmt.Printf("字符长度: %d\n",utf8.RuneCountInString(s1))// 字符串遍历fmt.Println("按字节遍历:")fori:=0;i<len(s1);i++{fmt.Printf("%x ",s1[i])}fmt.Println()fmt.Println("按字符遍历:")fori,ch:=ranges1{fmt.Printf("索引: %d, 字符: %c\n",i,ch)}// 字符串操作fmt.Printf("包含'世界': %v\n",strings.Contains(s1,"世界"))fmt.Printf("前缀'Hello': %v\n",strings.HasPrefix(s1,"Hello"))fmt.Printf("后缀'世界': %v\n",strings.HasSuffix(s1,"世界"))fmt.Printf("索引位置: %d\n",strings.Index(s1,"世界"))fmt.Printf("替换: %s\n",strings.Replace(s1,"世界","Go",1))fmt.Printf("分割: %v\n",strings.Split("a,b,c",","))fmt.Printf("连接: %s\n",strings.Join([]string{"a","b","c"},"-"))fmt.Printf("转大写: %s\n",strings.ToUpper("hello"))fmt.Printf("转小写: %s\n",strings.ToLower("HELLO"))fmt.Printf("去空格: '%s'\n",strings.TrimSpace(" hello "))fmt.Printf("重复: %s\n",strings.Repeat("Go",3))}2.3 类型转换
packagemainimport("fmt""strconv")funcmain(){// 数值类型转换variint=42varffloat64=float64(i)varuuint=uint(f)fmt.Printf("int: %d\n",i)fmt.Printf("float64: %.2f\n",f)fmt.Printf("uint: %d\n",u)// 字符串与数值转换// 整数转字符串s1:=strconv.Itoa(42)fmt.Printf("整数转字符串: %s, 类型: %T\n",s1,s1)// 字符串转整数i2,err:=strconv.Atoi("123")iferr!=nil{fmt.Println("转换错误:",err)}else{fmt.Printf("字符串转整数: %d, 类型: %T\n",i2,i2)}// 浮点数转字符串s2:=strconv.FormatFloat(3.14159,'f',2,64)fmt.Printf("浮点转字符串: %s\n",s2)// 字符串转浮点数f2,err:=strconv.ParseFloat("3.14",64)iferr!=nil{fmt.Println("转换错误:",err)}else{fmt.Printf("字符串转浮点: %.2f\n",f2)}// 布尔值转换b,err:=strconv.ParseBool("true")iferr!=nil{fmt.Println("转换错误:",err)}else{fmt.Printf("字符串转布尔: %v\n",b)}// 格式化字符串name:="张三"age:=25score:=95.5s3:=fmt.Sprintf("姓名: %s, 年龄: %d, 分数: %.1f",name,age,score)fmt.Println(s3)// 类型判断varxinterface{}="hello"switchv:=x.(type){caseint:fmt.Printf("x是int: %d\n",v)casestring:fmt.Printf("x是string: %s\n",v)casebool:fmt.Printf("x是bool: %v\n",v)default:fmt.Printf("x是未知类型: %T\n",v)}}
编程学习
技术分享
实战经验