スライスの追加操作を高速化するには、十分な容量を割り当てる必要があります。スライスを追加するには2つの方法があります、ここではコードです:Golangスライスの追加パフォーマンス
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)
よりも高速であり、私は理由を知りたいですか?
第がはるか複雑な操作であるスライスに付加されつつ、第1プレーンの割り当てです。それは尋ねるようなものです。「上り坂を歩くことは、椅子に座るよりもはるかに疲れています。なぜですか?" – Volker
あなたは"スライスを追加するには2つの方法があります、ここにコードがあります "と書いています。私の質問は「コードの第2の方法はどこですか?」 – mezoni
https://github.com/EricMountain/golang-benchmark- append –