4-7 reslice append
07 重新切片
111
- 重新切片(reslice)构建新的切片对象,依旧引用相同底层数组。
- 以[cap]slice为数据源,不能超出cap,但不受len限制。
- 重新切片索引以源对象为准(非底层数组)。
重新进行切片怎么做呢。比如在底层数组基础之上,创建一个切片,s1
从1到6,半开半闭。这时候就会形成两个概念,第一个指定的是长度,长度从1开始6结束,容量依然还是数组边界。
func main() {
a := [...]int{0, 1, 2, 3, 4, 5, 6}
s1 := a[:] // {0,1,2,3,4,5,6} len:7 cap:7
fmt.Println(s1, len(s1), cap(s1))
s2 := s1[2:4] // [2:4)起始地址2,访问元素边界4,{2,3} len:2 cap:5
fmt.Println(s2, len(s2), cap(s2))
s3 := s2[:5] // {2