第二章:基础语法 第二章基础语法2.1 变量声明显式声明packagemainimportfmtfuncmain(){// 方式1var关键字声明varnamestring张三varageint25varheightfloat641.75varisStudentbooltruefmt.Printf(姓名: %s, 年龄: %d, 身高: %.2f, 是否学生: %v\n,name,age,height,isStudent)// 方式2类型推断varcity北京// 自动推断为stringvarpopulation2100// 自动推断为intfmt.Printf(城市: %s, 人口: %d万\n,city,population)// 方式3批量声明var(firstNamestring小lastNamestring明scoreint95)fmt.Printf(全名: %s%s, 分数: %d\n,firstName,lastName,score)}短变量声明:packagemainimportfmtfuncmain(){// 短变量声明只能在函数内部使用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,yy,x fmt.Printf(交换后: x%d, y%d\n,x,y)}常量packagemainimportfmt// 单个常量constPI3.14159265358979// 批量常量const(StatusOK200StatusNotFound404StatusError500)// iota枚举const(Sundayiota// 0Monday// 1Tuesday// 2Wednesday// 3Thursday// 4Friday// 5Saturday// 6)// iota表达式const(_iota// 忽略第一个值KB1(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(fmtunsafe)funcmain(){// 整数类型vari8int8127// -128 到 127vari16int1632767// -32768 到 32767vari32int322147483647// -2^31 到 2^31-1vari64int649223372036854775807varu8uint8255// 0 到 255varu16uint1665535// 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))// 浮点类型varf32float323.14varf64float643.14159265358979fmt.Printf(float32: %.2f, 大小: %d字节\n,f32,unsafe.Sizeof(f32))fmt.Printf(float64: %.14f, 大小: %d字节\n,f64,unsafe.Sizeof(f64))// 复数类型varc1complex6412ivarc2complex12834ifmt.Printf(complex64: %v\n,c1)fmt.Printf(complex128: %v\n,c2)fmt.Printf(实部: %.0f, 虚部: %.0f\n,real(c2),imag(c2))// 布尔类型varb1booltruevarb2boolfalsefmt.Printf(bool: %v, %v\n,b1,b2)// 字节类型 (uint8的别名)varchbyteAfmt.Printf(byte: %c, ASCII: %d\n,ch,ch)// Unicode字符类型varrrune中fmt.Printf(rune: %c, Unicode: %U\n,r,r)}字符串类型packagemainimport(fmtstringsunicode/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;ilen(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(fmtstrconv)funcmain(){// 数值类型转换variint42varffloat64float64(i)varuuintuint(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{}helloswitchv: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)}}