a[low : high : max] capacity will be set to max - low, low <= high <= max https://stackoverflow.com/questions/27938177/golang-slice-slicing-a-slice-with-sliceabc

OSLICEHEADER 操作会创建我们在上面介绍过的结构体 reflect.SliceHeader,其中包含数组指针、切片长度和容量,它是切片在运行时的表示:

type SliceHeader struct { Data uintptr Len int Cap int }

正是因为大多数对切片类型的操作并不需要直接操作原来的 runtime.slice 结构体,所以 reflect.SliceHeader 的引入能够减少切片初始化时的少量开销,该改动不仅能够减少 约0.2% 的 Go 语言包大小,还能够减少 92 个 runtime.panicIndex 的调用,占 Go 语言二进制的 约3.5%。

3.2.4 追加扩容

分为append后的切片覆盖原切片和不覆盖原切片两种

3.2.5 切片拷贝