gpt4 book ai didi

golang slice 变量分配(来自教程)

转载 作者:IT王子 更新时间:2023-10-29 01:26:23 24 4
gpt4 key购买 nike

https://tour.golang.org/moretypes/11

在本教程中,s 首先被分配给

s := []int{2, 3, 5, 7, 11, 13}

然后对s进行一系列操作

s = s[:0]
printSlice(s) // len=0 cap=6 []
s = s[:4]
printSlice(s) // len=4 cap=6 [2 3 5 7]

我通常用 python 编写代码,所以这让我有点困惑。赋值s=s[:0]时,s不应该改成原始s的 slice ,也就是s 不再是一个数组而是一个 slice ?如何再次将此 slice 分配给其中实际包含内容的不同长度?

最佳答案

go 中的 slice 是一种位于数组顶部的奇特结构。在你的例子中:

s := []int{2, 3, 5, 7, 11, 13}

创建一个包含以下内容的数组:2, 3, 5, 7, 11, 13 slice s 指向该数组,它与数组本身一样长。

当 slice s = s[:0] 时,这会在同一个数组上创建一个长度为 0 的新 slice 。虽然新 slice 是空的,但因为当您使用 s = s[:4] 扩大 slice 时它共享同一个数组,所以您可以看到数组的前 4 个值。

slice 就像底层数组的窗口,修改 slice 不会修改数组。所以第一个 slice 让您看到数组中的所有元素,第二个 slice 不显示任何元素,第三个让您只看到前 4 个元素。

在这里,我使用 [] 来表示您示例的每个部分中的 slice a 内容:

[2 3 5 7 11 13]
[]2 3 5 7 11 13
[2 3 5 7] 11 13

但数组始终保持不变。

请注意,因为 slice 不会创建新数组,即使您将这些 slice 中的每一个保存在不同的变量中,底层数组也是相同的,因此如果您修改一个 slice 中的一个元素,您会在共享同一数组的所有 slice 中看到相同的变化。

关于golang slice 变量分配(来自教程),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47256103/

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