我是Golang的新手,我正在参加巡回赛。下面的代码产生以下结果:
a 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)
}
答案 0 :(得分:2)
每个切片都是指向基础数组的指针类型。使b时,将创建b指向的基础数组。通过限制b创建c时,将创建一个新切片,该切片指向与b相同的基础数组。
在b中更改某些条目时,您会注意到在c中这些值也被更改。
有一个官方博客条目,详细解释了所有这些内容:https://blog.golang.org/go-slices-usage-and-internals