我是 Go 新手,正在阅读 O'reilly 出版的一本名为“学习 Go”的书。在阅读有关切片的内容时,有以下声明:
为了增加切片的大小,从 Go 1.14 开始,规则是将容量加倍,直到达到 1024 的大小,然后再增长 25%。”
我写了这段 Go 代码来证明这一点。
package main
import "fmt"
func main() {
var length uint16 = 1024
var x []int
for i := 0; i < int(length); i++ {
x = append(x, i)
fmt.Printf("\nLength is %d. Capacity is %d", len(x), cap(x))
}
}
Run Code Online (Sandbox Code Playgroud)
从 0 到 len(x)==512 事实证明,Go 运行时使容量(也称为大小)翻倍。但对我来说有趣的部分开始了:当 len(x) >= 512 时,我预计容量为 1024,因为 512*2 = 1024。然而结果如下:
Length is 513. Capacity is 848
Run Code Online (Sandbox Code Playgroud)
所以大约增加了 65%。谁可以给我解释一下这个?