背景
package main
import "fmt"
func main() {
a := []int{1, 2, 3, 4, 5, 6, 7}
a2 := append(a[:2], a[3:]...)
fmt.Println(a2)
fmt.Println(a)
fmt.Println(&a2[0] == &a[0])
a[0] = -1
fmt.Println(a2)
fmt.Println(a)
fmt.Println("-------------")
b := []int{1, 2, 3, 4}
b2 := append(b[:2], []int{5, 6, 7, 8, 9, 10}...)
fmt.Println(b2)
fmt.Println(b)
fmt.Println(&b2[0] == &b[0])
b[0] = -1
fmt.Println(b2)
fmt.Println(b)
}
輸出結果:
[1 2 4 5 6 7]
[1 2 4 5 6 7 7]
true
[-1 2 4 5 6 7]
[-1 2 4 5 6 7 7]
-------------
[1 2 5 6 7 8 9 10]
[1 2 3 4]
false
[1 2 5 6 7 8 9 10]
[-1 2 3 4]
解釋
a[0:2]
長度為2, a[3:]
長度為4,原本的數組a長度為7,不需要擴展生成新數組( api說明 )
append 內置函數將元素附加到切片的末尾。如果它有足夠的容量,則重新劃分目標以容納新元素。如果沒有,將分配一個新的底層數組。 Append 返回更新後的切片。因此有必要將 append 的結果存儲在保存切片本身的變量中:
所以,就在原來的數組a上面做修改。
而b的情況相反,新數組長度為6,大於b的長度4,擴展了數組,生成新的數組。