Println 改变切片的容量

2023-12-13

考虑下面的代码

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

使用切片变量调用简单的 Println 会更改其容量。我怀疑使用可变参数调用任何函数...interface{}产生相同的效果。对于这种行为有任何合理的解释吗?


解释是,就像bradfitz在点github,如果你不使用make为了创建切片,编译器将使用它认为方便的上限。在不同版本甚至相同版本中创建多个切片可能会导致切片容量不同。

简而言之,如果您需要具体的容量,请使用make([]byte, len, cap)。否则你就不能信任固定容量。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Println 改变切片的容量 的相关文章

随机推荐