【发布时间】:2016-12-03 22:18:46
【问题描述】:
为了使切片追加操作更快,我们需要分配足够的容量。追加切片有两种方式,代码如下:
func BenchmarkSliceAppend(b *testing.B) {
a := make([]int, 0, b.N)
for i := 0; i < b.N; i++ {
a = append(a, i)
}
}
func BenchmarkSliceSet(b *testing.B) {
a := make([]int, b.N)
for i := 0; i < b.N; i++ {
a[i] = i
}
}
结果是:
BenchmarkSliceAppend-4 200000000 7.87 ns/op 8 B/op 0 allocs/op
BenchmarkSliceSet-4 300000000 5.76 ns/op 8 B/op
为什么a[i] = i 比a = append(a, i) 快?
【问题讨论】:
-
很高兴知道经典的按索引赋值更快。我认为
append方式很奇怪且容易出错。 ????♂️
标签: performance go slice