我是新来的戈朗,我是跟随巡回赛。下面的代码产生以下结果:
len=5 cap=5 0 0 0
B len=0 cap=5 []
C len=2 cap=5 0 0
D len=3 cap=3 0 0 0
当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)
}发布于 2018-10-04 13:37:32
每个切片都是指向基础数组的指针类型。当您创建b时,您将创建一个b点指向的基础数组。当您通过重新复制b创建c时,您将创建一个指向与b相同的基础数组的新切片。
当您更改b中的一些条目时,您会注意到这些值也在c中被更改。
有一篇官方博客文章详细解释了这一切:https://blog.golang.org/go-slices-usage-and-internals
https://stackoverflow.com/questions/52647891
复制相似问题