登录
首页 >  Golang >  Go问答

为什么我不能用 `copy()` 复制切片?

来源:Golang技术栈

时间:2023-03-21 17:26:49 337浏览 收藏

今日不肯埋头,明日何以抬头!每日一句努力自己的话哈哈~哈喽,今天我将给大家带来一篇《为什么我不能用 `copy()` 复制切片?》,主要内容是讲解golang等等,感兴趣的朋友可以收藏或者有更好的建议在评论提出,我都会认真看的!大家一起进步,一起学习!

问题内容

我需要在 Go 中复制一个切片并阅读文档,我可以使用一个复制功能。

复制内置函数将元素从源切片复制到目标切片。(作为一种特殊情况,它还将字节从字符串复制到字节片。)源和目标可能重叠。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上查看。那么为什么我不能复制切片呢?

正确答案

内置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 语言规范:附加和复制切片中

复制的元素数量是len(src)和的最小值len(dst)

编辑:

最后,文档copy()已更新,现在包含将复制源和目标的最小长度的事实:

Copy 返回复制的元素数量,它将是len(src) 和 len(dst)的 最小值。

以上就是《为什么我不能用 `copy()` 复制切片?》的详细内容,更多关于golang的资料请关注golang学习网公众号!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>