在Go中,深度复制切片的一种简洁/性能良好的方法是什么?我需要将切片复制到新的支持数组中,因为另一个数组由其他东西拥有,并且在复制后可能会被修改。
我目前正在这样做:
copy := append([]T{}, orig...)
T的元素类型在哪里orig?
T
orig
最快的方法似乎是在具有必要空间的切片后追加。我用基准测试结果扩展了@Anisus答案,并提供了最快的解决方案。
BenchmarkCopy 100000 18240 ns/op BenchmarkAppend 100000 18276 ns/op BenchmarkAppendPreCapped 100000 16407 ns/op
BenchmarkAppendPreCapped可能会避免切片归零和/或增大。看起来像这样:
copy := append(make([]T, 0, len(orig)), orig...)