我需要在 Go 中复制一个切片并阅读文档,我可以使用 复制 功能。
copy 内置函数将源切片中的元素复制到目标切片中。 (作为一种特殊情况,它还会将字节从字符串复制到字节片中。)源和目标可能重叠。 Copy 返回复制的元素数,这将是 len(src) 和 len(dst) 中的最小值。
但是当我这样做时:
arr := []int{1, 2, 3}
tmp := []int{}
copy(tmp, arr)
fmt.Println(tmp)
fmt.Println(arr)
我的 tmp
和以前一样是空的(我什至尝试使用 arr, tmp
):
[]
[1 2 3]
你可以在 go playground 上查看。那么为什么我不能复制一个切片呢?
原文由 Salvador Dali 发布,翻译遵循 CC BY-SA 4.0 许可协议
内置
copy(dst, src)
复制min(len(dst), len(src))
元素。因此,如果您的
dst
为空(len(dst) == 0
),则不会复制任何内容。试试
tmp := make([]int, len(arr))
( 去游乐场):输出(如预期):
不幸的是,这没有记录在
builtin
包中,但它记录在 Go Language Specification: Appending to and copying slices 中:编辑:
最后
copy()
的文档已经更新,它现在包含将复制源和目标的最小长度的事实: