为什么切片a保持不变?是否append()生成新切片?
a
append()
package main import ( "fmt" ) var a = make([]int, 7, 8) func Test(slice []int) { slice = append(slice, 100) fmt.Println(slice) } func main() { for i := 0; i < 7; i++ { a[i] = i } Test(a) fmt.Println(a) }
输出:
[0 1 2 3 4 5 6 100] [0 1 2 3 4 5 6]
典型append用法是
append
a = append(a, x)
因为append可以就地修改其参数或返回其参数的副本以及附加条目,具体取决于其输入的大小和容量。使用先前附加到的切片可能会产生意想不到的结果,例如
a := []int{1,2,3} a = append(a, 4) fmt.Println(a) append(a[:3], 5) fmt.Println(a)
可以打印
[1 2 3 4] [1 2 3 5]