gpt4 book ai didi

go - 附加到新 slice 会影响原始 slice

转载 作者:IT王子 更新时间:2023-10-29 02:08:14 27 4
gpt4 key购买 nike

我有以下代码会导致奇怪的结果。我不明白为什么:

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,但是如何更改。这是一个错误,因为我从未直接更改过并且显然我不希望这种情况发生吗?

最佳答案

请记住, slice 是 3 个字段的结构。

  • 指向底层数组的指针
  • slice 的长度
  • slice 的容量

append() 函数可以就地修改其参数或返回其参数的副本和一个附加条目,具体取决于其输入的大小和容量。 append() 函数创建一个新的 slice ,如果 slice 的长度大于 slice 指向的数组的长度。

关于go - 附加到新 slice 会影响原始 slice ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53572736/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com