gpt4 book ai didi

go - 有人可以向我解释这种行为吗?

转载 作者:行者123 更新时间:2023-12-01 22:38:51 25 4
gpt4 key购买 nike

我只是在用golang尝试一些简单的东西,并得到了这种行为

有人可以向我解释为什么吗?我觉得我对它的理解不正确...

package main

import (
"fmt"
)

func main() {
s := []int{1, 2, 3}
fmt.Println(s)
fmt.Println("----")
a := s[0:2]
fmt.Println(s)
fmt.Println(a)
a = append(a, 5)
fmt.Println("----")
fmt.Println(s)
fmt.Println(a)
a = append(a, 6)
fmt.Println("----")
fmt.Println(s)
fmt.Println(a)
}

Go Playground

响应:
[1 2 3]
----
[1 2 3]
[1 2]
----
[1 2 5]
[1 2 5]
----
[1 2 5]
[1 2 5 6]

我期待:
[1 2 3]
----
[1 2 3]
[1 2]
----
[1 2 3]
[1 2 5]
----
[1 2 3]
[1 2 5 6]

提前致谢, :)

最佳答案

您使用 slice 。 Slice是具有三个元素的结构,其中一个是指向具有数据(第二个容量,第三个长度)的数组的指针。

s -> array | 1 | 2 | 3 | 

下一个
a := s[0:2]

现在您有了两个 slice ,但是它们都指向同一数组,并且 slice 共享它们的数据。
s -> array | 1 | 2 | 3 | <- a

下一个:
a = append(a, 5)

在这里,您已经向第二个 slice 添加了元素,但是该 slice 与第一个 slice 共享相同的数组,因此您重写了第一个 slice (和数组)的最后一个元素。
s -> array | 1 | 2 | 5 | <- a

下一个:
a = append(a, 6)

在这里,您向第二个 slice 添加了另一个元素。但是用于该 slice 的数组不能包含更多元素,因此重新创建了第二个 slice 的数组。 Go已经创建了新数组,将所有元素从第一个数组复制到该数组,然后将该新数组用于第二个 slice 。第一 slice 仍使用其自己的数组。
s -> array | 1 | 2 | 5 | 
a -> array | 1 | 2 | 5 | 6 |

关于go - 有人可以向我解释这种行为吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58520499/

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