GO
一、基本结构与基本数据类型
1.0 变量
package main import "fmt" //全局变量:可以不使用 var ( name string age int ) func main() { var v1 string //不赋值为零值 var v2 = 2 //自动推导无需定义类型 v3 := 23 //自动推导简写 _ := fmt.Sprintf("") //匿名变量 下划线 fmt.Println(v1,v2,v3) //值类型使用只存储 s1 :=2 s2 :=s1 s1=1 fmt.Println(s2,s1) }
1.1 常量
const beef, two, c = "eat", 2, "veg" //并行赋值 const ( const ( Mond= iota //iota表示在常量组的第几行,从零开始 Tusday Wednesday Thursday, Friday, Saturday = 4, iota, iota //两个iota都是三,因为都在第四行 dsa =iota ) )
1.2 基本数据类型
Go 中不允许不同类型之间的混合使用
a.数字类型
//整数 int8(-128 -> 127) int16(-32768 -> 32767) int32(-2,147,483,648 -> 2,147,483,647) int64(-9,223,372,036,854,775,808 -> 9,223,372,036,854,775,807) //无符号整数: uint8(0 -> 255) uint16(0 -> 65,535) uint32(0 -> 4,294,967,295) uint64(0 -> 18,446,744,073,709,551,615) //浮点型 float32(+- 1e-45 -> +- 3.4 * 1e38) 精确到小数点后7位 float64(+- 5 1e-324 -> 107 1e308) 精确到小数点后15位
b.类型转换
i := int8(127) var i2 int32 i2= int32(i) //类型转换需要显示转换;不能直接 i2 =i fmt.Println(i2) v1 :=077 u := uint64(v1) //类型装换 fmt.Println(v1,u)
1.3 运算符
一元运算符: !true 取反 ^ 按位补足 << 位左移 小数点想左移动一位 >> 位右移 小数点想右移动一位 二运运算符: && 只有当两边的值都为 true 的时候 || 一边为true,返回true;两边为false,返回false 注:当二元运算符,左侧为true,则不会运算后面的代码,可以使用()提升优先级
1.4 进制数表示方法
v1 :=077 //增加前缀 0 来表示 8 进制数 v2 :=0xff //增加前缀 0x 来表示 16 进制数 v3 :=0xAA V4 := 10e3 //10e3 :表示10*(10)^3
1.5 格式化输出字符串
%d 用于格式化整数 %x 和 %X 用于格式化 16 进制表示的数字 %g 用于格式化浮点型 %f 输出浮点数,%e 输出科学计数表示法 %0d 用于规定输出定长的整数,其中开头的数字 0 是必须的 %p 指针的格式化标识符为 %s //不同编码的格式化方式 var ch int = '\u0041' //utf-8的16进制表示方式 var ch2 int = '\u03B2' var ch3 int = '\U00101234' fmt.Printf("%d - %d - %d\n", ch, ch2, ch3) // integer fmt.Printf("%c - %c - %c\n", ch, ch2, ch3) // character fmt.Printf("%X - %X - %X\n", ch, ch2, ch3) // UTF-8 bytes fmt.Printf("%U - %U - %U", ch, ch2, ch3) // UTF-8 code point
1.6 运算符优先级
-
二元运算符的运算方向均是从左至右
-
由上至下代表优先级由高到低
优先级 运算符 7 ^ ! 6 * / % << >> & &^ 5 + - | ^ 4 == != < <= >= > 3 <- 2 && 1 ||
1.7 类别名
-
类型别名得到的新类型并非和原类型完全相同,新类型不会拥有原类型所附带的方法
-
TZ 可以自定义一个方法用来输出更加人性化的时区信息
type integer int //给int起别名 var v32 integer //定义变量时可以使用别名来定义
1.8 字符串
//1.一般的比较运算符(==、!=、<、<=、>=、>)通过在内存中按字节比较来实现字符串的对比 //2.字符串是字节的定长数组,在中括号 [] 内写入索引 //3.字符串拼接使用+号,或者+=与同一个变量
1.9 strings包
func main() { s := "w ddd dsjkdsjs dk" s2 := "d" s3 :="22" println(strings.HasPrefix(s, "A")) //判断s开头 println(strings.HasSuffix(s2, "a"))//判断s2结尾 println(strings.Contains(s, "aS")) //判断s包含 println(strings.Index(s, "SA"))//返回w在s的下标;不存在时,返回-1;从首字符开始算 println(strings.LastIndex(s, "w"))//返回w最后出现的索引位置;不存在返回-1 println(strings.Replace(s, s2, s3, 6)) //s:表示原字符穿,s2是s中的字符,s3是替换s2的值,6表示需要替换6次s2 println(strings.Count(s, "w")) //统计w在s中出现的次数,非重叠 println(strings.Repeat(s2, 6)) //将s2重复拼接6次 println(strings.TrimSpace(" s d ")) //剔除字符串开头和结尾的空白符号 println(strings.Trim("sdds", "s")) //指定去除开头和结尾的s符号 println(strings.TrimLeft("sdd", "s")) //剔除左边的开头的字符 println(strings.Fields("sds ds d")) //以空格分隔,返回一个切片 println(strings.Split("sdsd", "s")) //指定以s分割,返回一个切片 println(strings.Join(strings.Fields("sds ds d"), "2")) //接收一个切片,每个元素中间以2拼接 println(strings.NewReader("sss")) //读取字符串内容返回reader对