Go 切片的容量

问题描述 投票:0回答:1

为什么 cap(b) 是 6 不应该是 5?

package main
import "fmt"
func main() {
    var s []int
    a := append(s, 1, 2, 3, 4)
    b := append(s, 1, 2, 3, 4, 5)
    c := append(s, 1, 2, 3, 4, 5, 6)
    fmt.Println(cap(a), cap(b), cap(c)) //output: 4 6 6
}

https://go.dev/play/p/2JjAdy1mxEN

go slice capacity cap
1个回答
0
投票

cap
- 底层 int 数组的容量。 您可以使用
len(a)
- 接收数组中的元素数量。

如果 s 的容量不足以容纳附加值,append 会分配一个新的、足够大的底层数组,以容纳现有切片元素和附加值。否则,追加会重新使用底层数组。

参考:https://go.dev/ref/spec#Appending_and_copying_slices

© www.soinside.com 2019 - 2024. All rights reserved.