array类型
var myarray [10]int //定义数组变量,此时myarray所有元素被初始化为0
myarray=[10]int{0,1,2,3,4,5,6,7} //初始化,此时必须为[10]int,之后myarray[8]=myarray[9]=0
也可以将以上两步合为一步:
var myarray [10]int=[10]int{1,2,3,4,5,6,7,8} //定义10个长度的数组并用8个变量初始化
array是固定长度的数组,这个和C语言中的数组是一样的,使用前必须确定数组长度。与C中的数组相比,有极大的不同:
1 Go中的数组是值类型。
如果你将一个数组赋值给另外一个数组,那么,实际上就是将整个数组拷贝一份,两份数组,存在与不同的内存空间。
2 作为形参,实际传递的是数组的拷贝。
注意不是数组的指针。在函数中对数组值的修改实际对该数组无效。
3 array的长度也是Type的一部分。
即[10]int和[20]int是不一样的。不能相互赋值。
len表示数组的长度,后面的int储存的是实际数据
slice类型
//用[x:y]时总会指向x 至 y -1个元素
1 slice是可变长的
2 slice是指针(引用)而不是值
指针比值可就小多了,因此,我们将slice作为函数参数传递比将array作为函数参数传递会更有性能。
slice是一个指针,它指向的是一个array机构,它有两个基本函数len和cap。
看下面的图示:
slice是一个带有point(指向数组的指针),Len(数组中实际有值的个数),Cap(数组的容量)