我需要在Go中制作切片的副本,并阅读文档,这里有一个复制功能供我使用。
内置复制功能将元素从源切片复制到目标切片。(在特殊情况下,它还会将字节从字符串复制到字节切片。)源和目标可能会重叠。复制返回复制的元素数量,该数量将是len(src)和len(dst)的最小值。
但是当我这样做时:
arr := []int{1, 2, 3} tmp := []int{} copy(tmp, arr) fmt.Println(tmp) fmt.Println(arr)
tmp与以前一样,我是空的(甚至尝试使用arr, tmp):
tmp
arr, tmp
[] [1 2 3]
您可以在运动场上查看。那为什么不能复制切片?
内置copy(dst, src)副本min(len(dst), len(src))元素。
copy(dst, src)
min(len(dst), len(src))
因此,如果您dst为空(len(dst) == 0),则不会复制任何内容。
dst
len(dst) == 0
尝试tmp := make([]int, len(arr))(前往Playground):
tmp := make([]int, len(arr))
arr := []int{1, 2, 3} tmp := make([]int, len(arr)) copy(tmp, arr) fmt.Println(tmp) fmt.Println(arr)
输出(预期):
[1 2 3] [1 2 3]
不幸的是,这没有记录在builtin软件包中,而是记录在 Go语言规范中:附加和复制切片 :
builtin
复制的元素的数目是最小len(src)和len(dst)。
len(src)
len(dst)
编辑:
最后,的文档copy()已更新,现在包含以下事实:将复制源和目标的最小长度:
copy()
复制返回复制的元素数量,该数量将是len(src)和len(dst)的 最小值 。