考虑以下代码
package main
import (
"fmt"
)
func main() {
x := []byte("a")
fmt.Println(x)
fmt.Println(cap(x) == cap([]byte("a"))) // prints false
y := []byte("a")
fmt.Println(cap(y) == cap([]byte("a"))) // prints true
}
https://play.golang.org/p/zv8KQekaxH8
用 slice 变量调用简单的 Println,改变它的容量。我怀疑使用 ...interface{}
的可变参数调用任何函数都会产生相同的效果。对这种行为有什么合理的解释吗?
最佳答案
解释是,像 bradfitz point in github ,如果您不使用 make
创建一个 slice ,编译器将使用它认为方便的上限。 在不同版本甚至相同版本中创建多个 slice 可能会产生不同容量的 slice 。
简而言之,如果您需要具体的容量,请使用make([]byte, len, cap)
。否则你不能相信固定容量。
关于go - Println 改变 slice 的容量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49951924/