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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 01.{ 换行: Opening Brace Can't Be Placed on a Separate Lin...
    码农不器阅读 2,421评论 0 14
  • 其本身并不是数组,它指向底层的数组作为变长数组的替代方案,可以关联底层数组的局部或全部为引用类型可以直接创建或从底...
    haokeed阅读 239评论 0 0
  • 切片slice 本身并不是数组,它指向底层的数组 作为变长数组的替代方案,可关联底层数组的局部或全部 数据类型为引...
    kaxi4it阅读 516评论 0 0
  • java中String的常用方法 1、length()字符串的长度 例:char chars[]={'a','b'...
    赤赤有名阅读 2,094评论 0 10
  • java笔记第一天 == 和 equals ==比较的比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量...
    jmychou阅读 1,516评论 0 3