Menu
CoddyTech

切片就是数组

Coddy Go 中的切片和映射 课程的第 11 课,共 21 课。

如果你不清楚切片和数组之间有什么关系,我们来解释一下。在 Go 中,切片实际上是对数组的引用,这个数组称为“底层数组”。为了理解这一点,我们来看一个例子:

假设我们有这样一个切片:

str := []string{"Coddy", "Learn", "Play", "test"}

你觉得这个 str 切片会直接存储这四个元素吗?答案是否定的,因为切片本身不会直接存储任何元素。

创建这样的切片时,Go 会在内存中创建一个数组,然后返回一个指向该数组的切片值。这种数组称为切片的底层数组。所以,实际存储这些元素的是底层数组,而不是切片。

这个底层数组可以被其他切片共享。例如:

str := []string{"Coddy", "Learn", "Play", "test"}
slice1 := str[0:3]
slice2 := str[1:4]

在这个例子中,slice1 和 slice2 共享同一个底层数组。我们可以看到,切片操作不会创建新的底层数组,而是创建一个指向同一底层数组某个部分的切片。

因此,在这个例子中,所有切片都共享同一个底层数组,可以表示如下:

每当我们修改原始切片时,其他切片也会反映这些变化,因为它们访问的是同一个底层数组。例如,如果我们把 "Learn" 改成 "Fun",就会变成这样:

所以,你需要知道,切片字面量(name := []string{})总会在底层创建一个底层数组。

亲手试试

这节课没有代码挑战。

Go 中的切片和映射中的所有课

自己练习: Go 在线编译器