slice的capacity

capacity的值可以通过 cap() 得到,这个值表示slice底层array的长度。


capacity的值可以在make的时候设定,也可以在reslice的时候设定。

  1. 最原始的硬编码初始化方式, 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]
  1. 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]
  1. 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

你可能感兴趣的:(slice的capacity)