使用append来克隆切片常常比使用copy高效得多
以下文章来源于Go 101 ,作者老貘
直接上基准测试:
package main
import "testing"
type Element = int64
const N = 1024 * 1024
var y0 []Element
func Benchmark_PureMake(b *testing.B) {
for i := 0; i
基准测试结果(标准编译器1.12):
Benchmark_PureMake-4 1328951 ns/op
Benchmark_PureCopy-4 1271411 ns/op
Benchmark_MakeAndCopy-4 2799283 ns/op
Benchmark_Append-4 1637352 ns/op
从这个结果可以看出,使用append来克隆切片比使用make+copy要高效得多。使用make+copy相对低效的原因是make需要将其开辟出的每个元素置零,这对于这个应用场景其实是没有必要的。
注意:
- 今后的标准编译器版本可能会对使用make+copy方法进行优化,从而将完全消除这两种方法的性能差异。
- 当切片的元素中包含指针时,这两种方法的性能差异并不大。
- 此第二种方法(使用append)参考了如何完美地克隆一个切片这篇文章。