基本数据类型
整型
有符号类型:int8、int16、int32、int64,分别对应8、16、32、64bit大小
无符号类型:uint8、uint16、uint32、uint64
浮点数与复数
float32和float64
两种精度的复数类型:complex64和complex128,分别对应float32和float64两种浮点数精度。
布尔型
true和false
字符串
只支持双引号,不支持单引号。string := "hello, go"
常量
const 标记。
ioat常量生成器,适合生成枚举类型。如下面的例子,Sunday被声明为0,Monday为1,一次类推。
1 | type Weekday int |
复合数据类型
数组 array
数组的长度是固定,所以实际项目中是比较少直接使用
1 | var num [10]int // 声明长度为10的int类型数组,每个值初始值为0 |
切片 slice
变长的数组,如果你之前是写php,那你就可以把slice认为是php的无索引数组了,一般写作[]T
一个slice由三部分构成:指针、长度、容量。内置的len和cap函数返回对应长度和容量。
len(s) == 0判断是否为空,不应该用 s == nil
append扩展slice
1 | var nums []int |
哈希表 map
是一个无序的key/value对的集合,写法:map[K]V。
如果你之前是写php,那你可以把它认为是php的索引数组,但没有PHP灵活,他的key,必须是同一类型,value也必须是统一类型。
1 | score := make(map[string]int) // 创建key为string,value为int型 |
结构体 struct
复杂聚合数据类型。如果成员首字母大写,则对外可见。
1 | type Student struct { |
结构体嵌入和匿名成员
1 | type Person struct { |
Go语言的特性:可以只声明一个成员对应的数据类型而不指定成员名,如上Person。实际项目中开发使用该声明方式。