golang学习(三)—— 数组、切片、map

编码规范:可参考这篇文章: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,地图没有固定的长度,它是一种引用类型,就像切片一样。

原文地址:https://www.cnblogs.com/ecake/p/8716736.html