首页 > 后端开发 > Golang > 如何在 Go 中深度复制切片:追加与复制?

如何在 Go 中深度复制切片:追加与复制?

Mary-Kate Olsen
发布: 2025-01-01 03:44:10
原创
663 人浏览过

How to Deep Copy a Slice in Go: Append vs. Copy?

如何在 Go 中简洁高效地深度复制切片

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板