go中slice由于其类似于一个长度可动态变化的数组而非常方便使用。slice有两个基本属性:cap,len,分别代表容量和已有数据长度。
一般声明slice的两种方式如下:1
2
3
4//定义了一个初始长度为0,容量为2的int 类型的 `slice`
slice:=make([]int,0,2)
var slice=[]int{0,1}
往slice中添加元素使用append方法:1
slice=append(slice,1)
当然有时也可以使用索引值来直接赋值:1
slice[0]=1
不过这种方式需要注意的是,索引的值不能大于slice的容量(cap),否则会报出panic: runtime error: index out of range错误。所以一般情况下应该优先使用append的方法给slice添加元素。
同样,对slice或者array进行切片(slice)操作的时候,索引也不能超过当前slice的容量或者array的长度1
2
3var slice = []int{0, 1, 2, 3, 4, 5, 6}
fmt.Println(slice[:5]) //[0,1,2,3,4]
fmt.Println(slice[1:10]) //slice bounds out of range
slice的容量扩容规则: 当容量不够时,容量扩充为之前容量的2倍
在调用append方法给slice添加元素的时候,可以一次添加多个或者全部:1
2
3
4
5
6var slice = []int{0,1}
var slice2 = []int{2,3}
fmt.Println(append(slice,slice2...)) //[0,1,2,3]
fmt.Println(append(slice,4,5)) //[0,1,4,5]