在Go 中使用切片時,您可能會遇到需要深度複製切片的需求,以確保對副本的更改不會發生不影響原來的切片。本文探討了兩種簡潔且性能良好的方法來實現此目的。
一種成熟的技術是使用追加函數:
copy := append([]T{}, orig...)
但是,還有一種使用內建副本的替代方法函數已經出現:
cpy := make([]T, len(orig)) copy(cpy, orig)
複製函數的文檔指出,它將元素從來源切片複製到目標切片,必要時重疊。它會傳回複製的元素數量,該數量受到兩個切片長度的限制。
注意: 兩種方法只複製切片中的數值。如果切片包含指標或具有指標欄位的結構,這些指標將繼續指向與原始切片中相同的值。
基準結果:
評估為了檢查這些方法的性能,進行了基準測試:
BenchmarkCopy 100000 24724 ns/op BenchmarkAppend 100000 24967 ns/op
如您所見,兩種方法非常相似
程式集分析:
檢查為每個方法產生的組件發現,兩者都呼叫runtime.growslice或runtime.makeslice,它們可能負責執行任何新切片需要零填充。
以上是在 Go 中深度複製切片的最簡潔、最高效的方法是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!