首頁 >後端開發 >Golang >在 Go 中深度複製切片的最簡潔、最高效的方法是什麼?

在 Go 中深度複製切片的最簡潔、最高效的方法是什麼?

Patricia Arquette
Patricia Arquette原創
2024-12-23 19:26:151006瀏覽

What are the Most Concise and Performant Ways to Deep Copy Slices in Go?

深度複製切片的簡潔性和性能

在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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn