3 回答
![?](http://img1.sycdn.imooc.com/5333a1bc00014e8302000200-100-100.jpg)
TA贡献1876条经验 获得超7个赞
内置copy(dst, src)复制min(len(dst), len(src))元素。
因此,如果您的dst值为空 ( len(dst) == 0),则不会复制任何内容。
尝试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 Language Specification: Appending to and copying slices 中有记录:
复制的元素的数目是最小len(src)和len(dst)。
编辑:
最后,文档copy()已更新,现在包含将复制源和目标的最小长度的事实:
Copy 返回复制的元素数,这将是len(src) 和 len(dst) 中的最小值。
![?](http://img1.sycdn.imooc.com/545868b60001587202200220-100-100.jpg)
TA贡献1859条经验 获得超6个赞
如果您的切片大小相同,它将起作用:
arr := []int{1, 2, 3}
tmp := []int{0, 0, 0}
i := copy(tmp, arr)
fmt.Println(i)
fmt.Println(tmp)
fmt.Println(arr)
会给:
3
[1 2 3]
[1 2 3]
来自“ Go Slices:用法和内部结构”:
复制功能支持在不同长度的切片之间进行复制(它只会复制到较少数量的元素)
通常的例子是:
t := make([]byte, len(s), (cap(s)+1)*2)
copy(t, s)
s = t
- 3 回答
- 0 关注
- 259 浏览
添加回答
举报