capacity的值可以通过 cap()
得到,这个值表示slice底层array的长度。
capacity的值可以在make的时候设定,也可以在reslice的时候设定。
- 最原始的硬编码初始化方式,
len(s) == cap(s)
ps:这种声明方式叫复合声明
s1 := []int{1, 2, 3, 4, 5, 6}
fmt.Println(len(s1), cap(s1), s1) // 6 6 [1 2 3 4 5 6]
- make的第三个参数可以显示指定capacity
s2 := make([]int, 4, 8)
fmt.Println(len(s2), cap(s2), s2) // 4 8 [0 0 0 0]
s3 := make([]int, 4)
fmt.Println(len(s3), cap(s3), s3) // 4 4 [0 0 0 0]
- reslice的时候可以指定max,如
a[low:high:max]
用这个表达式的条件是0 <= low <= high <= max <= cap(a)
新slice的capacity,就是max-low
s4 := s1[1:4:5]
fmt.Println(len(s4), cap(s4), s4) // 3 4 [2 3 4]
最后一点很重要,如果要做 []
操作,一定要关注 length
而不是 capacity
fmt.Println(s4[3]) // panic: runtime error: index out of range