我对附加到已经具有最大可能大小的切片时的行为感到困惑。
据我了解,切片的最大大小可以是 int32 或 int64,具体取决于您的系统。
执行时,我得到了符合我预期的test := make([]struct{},math.MaxInt64+1)错误。len argument too large in make([]struct {})但是当做类似的事情时:
test := make([]struct{},math.MaxInt64)
for i:=0;i<100 ; i++ {
test = append(test, struct{}{})
}
fmt.Println(len(test))
我预计程序会出现恐慌,但令人惊讶的是,代码运行时没有任何问题,并len返回一个溢出的值-9223372036854775709。
有人可以详细说明这种行为吗?
(我用的是go1.11.2 linux/amd64)
鸿蒙传说
相关分类