s2=s[x:y]
创建出的切片s2与s共享数组
那么s2的len cap分别是?
s2的len=y-x cap=cap(s)-x
比如
s := make([]int, 30, 40)
s2 := s[10:20]
fmt.Println(len(s2)) // 10
fmt.Println(cap(s2)) // 30
s和s2共享的数组中10-19对s2可见
修改s2的某个值同时反应在s中
对于append
s2的操作
上文中s2的cap=y-x
在cap的范围内append 修改的依然是共享数组
s2=append(s2,n) n会反映在s[20]上 替换s[20]的值
当append超过cap时s2底层指向一个新数组 容量提升25%
s和s2分道扬镳
使用s2=s[x:y]这种形式创建切片 由于共享底层数组 在s2上append会影响s的值
使用s2=s[x:y:y]创建 限定了s2的cap=y-x append后会创建新底层数组 避免了s对应的值被意外替换
有疑问加站长微信联系(非本文作者)