在 Go 中,有效地創建切片的深度副本對於防止修改原始後備數組至關重要。一種常用的方法涉及使用切片文字和追加函數:
copy := append([]T{}, orig...)
但是,還有一種利用內建複製函數的替代方法:
cpy := make([]T, len(orig)) copy(cpy, orig)
這種方法檢索所需的儲存並使用複製內建函數直接將元素從來源複製到目標。根據文件:
func copy(dst, src []Type) int
The copy built-in function copies elements from a source slice into a destination slice. ... Copy returns the number of elements copied, which will be the minimum of len(src) and len(dst).
注意:
兩種方法都執行淺複製,這意味著切片內的指針或結構體字段仍將指向到原來的
基準:
比較兩種技術的性能會產生相似的結果:
BenchmarkCopy 100000 24724 ns/op BenchmarkAppend 100000 24967 ns/op
這表明這兩種方法同樣適合Go中的深度複製切片。然而,在處理大切片時,複製函數方法可能會稍微更有效。
以上是如何在 Go 中有效率地深度複製切片?的詳細內容。更多資訊請關注PHP中文網其他相關文章!