go 切片append的坑

1 阅读1分钟
arr := [5]int{1,2,3,4,5}
sli1 := arr[1:2] // [2] length 1, cap 4
sli1 = append(sli1, 6) // [2,6] 此时length 2, cap 4
fmt.printIn(arr) // 【1,2,6,4,5】 因为sli1的长度没有超过cap,所以append修改sli1的底层数组arr

arr := [5]int{1,2,3,4,5}
sli1 := arr[1:2] // [2] length 1, cap 4
sli1 = append(sli1, 0,0,0,0,0) // [2,0,0,0,0,0] 此时 length 2, cap扩容:4 * 2
fmt.printIn(arr) // [1,2,3,4,5] // 因为append的时候,sli1扩容了,底层数组不再指向arr,所以不会修改arr