4-8 copy 与避免长时间引用大数组
08 copy
func main() {
a := [...]int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
s1 := a[6:]
s2 := a[4:7]
fmt.Println(copy(s2, s1), a) // 3 [0 1 2 3 6 7 8 7 8 9]
}
- 在两个slice间复制数据,复制长度以段slice为准。
- 允许指向同一底层数组,允许目标区间重叠。
两个切片之间拷贝数据的时候。第一这两个切片可以指向同一个底层数组,第二切片复制区间可以重叠。复制的时候,s1
容量是4,s2
容量是3,复制长度以短的为准。s1
数据拷贝到s2
相当于把678覆盖456,底层数组变成0123678789。复制需要知道就是它允许指向同一个数组&