1. slice基本操作
  • s=[:0] 清空切片
  • s=[:2:3] 从切片或者数组引用指定长度和容量的切片

对于 s[i:l:c]i 是起始偏移的起始位置, l 是起始偏移长度的结束位置,c是起始偏移的容量结束位置,那么s[i:l:c]的长度和容量是怎么计算的呢?

  • len: l-i 为新切片的长度
  • cap: c-i 为新切片的容量

需要特别注意的是: i l c 并不是当前 slice 的索引,而是引用底层数组相对于当前 slice 起始位置的偏移量,所以可以超出当前 slice 的长度,但是不能超出当前 slice 的容量

  1. slice扩容策略
  • 首先,如果新申请容量大于2倍的旧容量,最终容量为新申请的容量
  • 其次,如果旧切片的长度小于1024,那么新切片的容量就是旧切片的两倍
  • 再次,如果旧切片的长度大于等于1024,每次扩容最终容量将增加旧容量的1/4,直到最终容量大于新申请的容量
  • 最后,如果最终容量值溢出,那么最终容量就是新申请容量