编码规范:可参考这篇文章:Golang编码规范
数组(array)
var arr [n]type | n为数组长度,type为元素类型
arr :=[...]int{4,5,6} | 自动计算长度分配空间
特点:数组的长度在定义后无法再次修改
数组是值类型,每次传递都将产生一份副本
注:数组长度属于数组类型的一部分,例如:[3]int 和 [4]int 是不同的类型
切片(slice)
数组的主要缺点就是我们需要预先知道数组长度,但有时候,这是不可能的,golang提供了数组切片(slice)功能来弥补数组的不足
切片本身并非动态数组或数组指针,它内部通过指针引用底层数组,设定相关属性将数据读写操作限定在指定区域内
type slice struct{ array unsafe.Pointer len int cap int }
x := [...]int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} s1 := x[:] //[0 1 2 3 4 5 6 7 8 9] s2 := x[2:6] //[2 3 4 5] //x[los:high:max]——>len=high-low,cap=max-low //len用于限定可读元素数量,cap表示切片所引用数组片段的真实长度 //人话:s3就是在x数组的 第2位 到 第9位 中取前(6-2=)4个元素 s3 := x[2:6:9] //[2 3 4 5]
s4 := x[3:] //[3 4 5 6 7 8 9] 等价于x[3:len(x)]
s5 := x[:3] //[0 1 2] 等价于x[0:3]
字典(map)
map [ keytype ] valuetype
数组和切片的索引只能是int类型,map的索引可以是你定义的类型
m := make(map[string]int) m["id"] = 12 m["minute"] = 60 m["score"] = 99
1,地图是无序的,每次打印地图都会得到不同的结果
2,地图没有固定的长度,它是一种引用类型,就像切片一样。