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