我对以下代码有疑问
package main
import "fmt"
func main() {
var a []int
printSlice("a", a)
// append works on nil slices.
a = append(a, 0)
printSlice("a", a)
// the slice grows as needed.
a = append(a, 1)
printSlice("a", a)
// we can add more than one element at a time.
a = append(a, 2, 3, 4)
printSlice("a", a)
}
func printSlice(s string, x []int) {
fmt.Printf("%s len=%d cap=%d %v\n",
s, len(x), cap(x), x)
}
Run Code Online (Sandbox Code Playgroud)
我总是猜测运行一段代码的结果会是什么样子然后运行代码并检查我的猜测是否正确.但是这个代码与我的猜测有点不同:
结果:
在我当地的旅游服务器上:
a len=0 cap=0 []
a len=1 cap=1 [0]
a len=2 cap=2 [0 1]
a len=5 cap=6 [0 1 2 3 4]
Run Code Online (Sandbox Code Playgroud)
一切都好,直到最后一行,但我没有
cap=6
Run Code Online (Sandbox Code Playgroud)
为什么不
cap=5
Run Code Online (Sandbox Code Playgroud)
我的意见是我没有创建具有显式容量的切片,因此我的系统给它的值为6.
2)但是当我在golang tour服务器上尝试这个相同的代码时,我会得到更多不同的结果,如下所示:
a len=0 cap=0 []
a len=1 cap=2 [0]
a len=2 cap=2 [0 1]
a len=5 cap=8 [0 1 2 3 4]
Run Code Online (Sandbox Code Playgroud)
那么第二行的cap = 2和最后一行的cap = 8怎么样?