Go 中切片追加和賦值的效能比較
在 Go 中,切片在高效管理資料方面發揮著重要作用。然而,關於兩種常用切片操作:追加和賦值之間的性能差異,出現了問題。
追加與分配
append() 操作擴展了現有切片帶有附加元素,而賦值運算子(=) 在應用於切片時,只需用新元素覆蓋現有元素
性能分析
對以下程式碼進行基準測試展示了效能差距:
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 } }
基準測試結果顯示「a[i] = i」(賦值)總是優於「a =append(a, i)」 (append):
BenchmarkSliceAppend 200000000 7.87 ns/op 8 B/op 0 allocs/op BenchmarkSliceSet 300000000 5.76 ns/op 8 B/op
解釋
「a[i] = i」更快的表現可以歸因於其直接賦值的性質。它只是將值 i 賦給切片中的對應元素。
相反,「a =append(a, i)」涉及一系列操作:
與「a[i] = 中的直接賦值相比,這些額外的步驟會帶來開銷i"。
結論
了解切片操作之間的效能差異對於最佳化程式碼效率至關重要。對於簡單的賦值,「a[i] = i」被證明是一個更有效的選擇。然而,當需要擴展切片時,「a =append(a, i)」仍然是合適的方法。
以上是Go 中哪一個比較快:`append()` 或切片賦值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!