在 Go 中,复制切片需要考虑创建新的后备数组,以防止对原始数组的无意修改。有几种简洁且性能良好的方法可以实现此目的。
一种方法是使用追加函数:
copy := append([]T{}, orig...)
其中 T 是原始切片 orig 的元素类型。但是,存在使用内置复制函数的替代解决方案:
cpy := make([]T, len(orig)) copy(cpy, orig)
复制函数针对在语言内复制切片进行了优化。来自 Go 文档:
“copy 内置函数将源切片中的元素复制到目标切片中。 ... Copy 返回复制的元素数量,这将是 len(src) 的最小值和 len(dst)。”
注意:
重要的是要记住这些解决方案复制值切片。如果切片包含指针或带有指针字段的结构,这些指针仍将指向与原始切片相同的值。
基准:
测试追加和复制方法揭示了相似的性能特征:
BenchmarkCopy 100000 24724 ns/op BenchmarkAppend 100000 24967 ns/op
基准测试结果表明两种方法对于深度复制同样有效切片。
以上是如何在 Go 中深度复制切片:追加与复制?的详细内容。更多信息请关注PHP中文网其他相关文章!