我是 Golang 的新手,我正在关注 Tour。下面的代码产生以下结果:
一个 len=5 cap=5 [0 0 0 0 0]
b len=0 cap=5 []
c len=2 cap=5 [0 0]
d len=3 cap=3 [0 0 0]
当 c 根本没有指定时,c 怎么会和 b 有相同的上限呢?
package main
import "fmt"
func main() {
a := make([]int, 5)
printSlice("a", a)
b := make([]int, 0, 5)
printSlice("b", b)
c := b[:2]
printSlice("c", c)
d := c[2:5]
printSlice("d", d)
}
func printSlice(s string, x []int) {
fmt.Printf("%s len=%d cap=%d %v\n", s, len(x), cap(x), x)
}
最佳答案
每个 slice 都是指向底层数组的指针类型。当你制作 b 时,你创建了一个 b 指向的基础数组。当您通过重新复制 b 创建 c 时,您将创建一个指向与 b 相同的底层数组的新 slice 。
当您更改 b 中的某些条目时,您会注意到这些值在 c 中也发生了变化。
有一个官方博客条目,详细解释了所有这些:https://blog.golang.org/go-slices-usage-and-internals
关于go - slice 的容量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52647891/