【发布时间】:2021-01-08 15:30:50
【问题描述】:
对于
package main
import "fmt"
func main() {
b := make([]int, 1, 5)
printSlice("b", b[:cap(b)])
b2 := append(b, 1)
b3 := append(b2, 1)
b4 := append(b3, 1)
b5 := append(b4, 1)
printSlice("bbbb", b5[:cap(b5)])
b6 := append(b5, 1)
printSlice("bbbb", b6[:cap(b6)])
}
func printSlice(s string, x []int) {
fmt.Printf("%s len=%d cap=%d %v\n",
s, len(x), cap(x), x)
}
结果是
b len=5 cap=5 [0 0 0 0 0]
bbbb len=5 cap=5 [0 1 1 1 1]
bbbb len=10 cap=10 [0 1 1 1 1 1 0 0 0 0]
看起来最后一个 append 是底层数组大小的两倍,有没有办法说它的大小为 6?
【问题讨论】:
-
如果您需要特定容量,您可以切片或分配您想要的容量。
append在一般情况下效率最高。 -
这里提出了一个可能的解决方案:github.com/golang/go/issues/41551