golang切片变量赋值(来自教程)
在本教程中,golang切片变量赋值(来自教程),go,Go,在本教程中,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的切片,这意味着s不再是数组而是切片?如何将此切片再次分配给实际包含内容的不同长度?go中的切片是一种位于数组顶部的奇
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
的切片,这意味着s
不再是数组而是切片?如何将此切片再次分配给实际包含内容的不同长度?go中的切片是一种位于数组顶部的奇特结构。在您的示例中:
s := []int{2, 3, 5, 7, 11, 13}
[2 3 5 7 11 13]
[]2 3 5 7 11 13
[2 3 5 7] 11 13
创建一个包含以下内容的数组:2、3、5、7、11、13,切片s
指向该数组,它与数组本身一样长
当切片s=s[:0]
时,将在同一数组上创建长度为0的新切片。尽管新切片是空的,因为当您使用s=s[:4]
将切片变大时,它共享相同的数组,因此它允许您查看数组的前4个值
切片就像是底层数组中的窗口,修改切片不会修改数组。因此,第一个片段让您看到数组中的所有元素,第二个片段不显示任何元素,第三个片段让您只看到前4个元素
在这里,我使用[]
来表示示例每个部分中的切片a
内容:
s := []int{2, 3, 5, 7, 11, 13}
[2 3 5 7 11 13]
[]2 3 5 7 11 13
[2 3 5 7] 11 13
但数组始终保持不变
需要注意的是,由于切片不会创建新的数组,即使您将每个切片保存在不同的变量中,底层数组也是相同的,因此,如果您修改一个切片中的一个元素,您将在共享同一数组的所有切片中看到相同的更改。阅读本文以了解切片的工作原理:因此,如果我修改该值(比如,
s[1]=10
),我应该会看到数组本身的变化?意思是现在数组看起来像[2,10,5,7,11,13]
?没错。看看我举的这个小例子: