首页 >后端开发 >Golang >在 Go 中深度复制切片的最简洁、最高效的方法是什么?

在 Go 中深度复制切片的最简洁、最高效的方法是什么?

Patricia Arquette
Patricia Arquette原创
2024-12-23 19:26:151006浏览

What are the Most Concise and Performant Ways to Deep Copy Slices in Go?

深度复制切片的简洁性和性能

在 Go 中使用切片时,您可能会遇到需要深度复制切片的需求,以确保对副本的更改不会发生不影响原来的切片。本文探讨了两种简洁且性能良好的方法来实现此目的。

一种成熟的技术是使用追加函数:

copy := append([]T{}, orig...)

但是,还有一种使用内置副本的替代方法函数已经出现:

cpy := make([]T, len(orig))
copy(cpy, orig)

复制函数的文档指出,它将元素从源切片复制到目标切片,必要时重叠。它返回复制的元素数量,该数量受到两个切片长度的限制。

注意: 两种方法仅复制切片中的值。如果切片包含指针或具有指针字段的结构,这些指针将继续指向与原始切片中相同的值。

基准结果:

评估为了检查这些方法的性能,进行了基准测试:

BenchmarkCopy     100000         24724 ns/op
BenchmarkAppend   100000         24967 ns/op

如您所见,两种方法非常相似

程序集分析:

检查为每个方法生成的程序集发现,两者都调用runtime.growslice或runtime.makeslice,它们可能负责执行任何新切片需要零填充。

以上是在 Go 中深度复制切片的最简洁、最高效的方法是什么?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn