我有以下代码会导致奇怪的结果。我不明白为什么:
func main() {
var s = []int{2, 3}
var s1 = append(s, 4)
var a = append(s1, 5)
var b = append(s1, 6)
fmt.Println(s)
fmt.Println(s1)
fmt.Println(a)
fmt.Println(b)
}
这将导致:
[2 3]
[2 3 4]
[2 3 4 6]
[2 3 4 6]
我的问题是:为什么a不是[2 3 4 5]而是[2 3 4 6]?我知道追加到b会更改a,但是会如何。这是一个错误,因为我从未直接更改过,并且显然我不希望这种情况发生吗?
答案 0 :(得分:1)
请记住,切片是3个字段的结构。
append()函数可以就地修改其自变量,也可以返回其自变量的副本以及其他条目,具体取决于其输入的大小和容量。如果该切片的长度大于该切片所指向的数组的长度,则append()函数将创建一个新的切片。