在Go 中建立切片的深層副本
在Go 中使用切片時,了解如何建立深層副本至關重要份副本所做的變更不會影響原始副本。一種有效的方法是利用內建的複製函數。
使用「複製」函數
複製函數採用兩個切片作為參數,目標切片 dst和一個來源切片 src。它將元素從 src 複製到 dst,即使兩個切片重疊。此函數傳回成功複製的元素數量。
範例:
cpy := make([]T, len(orig)) n := copy(cpy, orig)
在此範例中,將建立一個與原始切片長度相同的新切片 cpy切片原始。然後使用 copy 函數將元素從 orig 複製到 cpy,其中 n 代表複製的元素數量。
Benchmarking Performance
用於比較複製的效能函數與常用的append方法進行了基準測試。結果表明,兩種方法具有相當的性能:
BenchmarkCopy: 24724 ns/op BenchmarkAppend: 24967 ns/op
注意事項
需要注意的是,雖然複製函數創建了切片值的深層副本,它不處理複製指標或具有指標欄位的結構。這些欄位仍將指向與原始切片中相同的值。
以上是如何有效率地創造Go Slice的深拷貝?的詳細內容。更多資訊請關注PHP中文網其他相關文章!