gpt4 book ai didi

go - 为什么我不能用 `copy()` 复制 slice ?

转载 作者:IT老高 更新时间:2023-10-28 12:57:23 26 4
gpt4 key购买 nike

我需要在 Go 中复制一个 slice 并阅读文档有一个 copy功能由我支配。

The copy built-in function copies elements from a source slice into a destination slice. (As a special case, it also will copy bytes from a string to a slice of bytes.) The source and destination may overlap. Copy returns the number of elements copied, which will be the minimum of len(src) and len(dst).

但是当我这样做时:

arr := []int{1, 2, 3}
tmp := []int{}
copy(tmp, arr)
fmt.Println(tmp)
fmt.Println(arr)

我的 tmp 和以前一样是空的(我什至尝试使用 arr, tmp):

[]
[1 2 3]

您可以随时查看 playground .那么为什么我不能复制 slice 呢?

最佳答案

内置 copy(dst, src)复制 min(len(dst), len(src)) 元素。

因此,如果您的 dst 为空(len(dst) == 0),则不会复制任何内容。

试试 tmp := make([]int, len(arr)) (Go Playground):

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 :

The number of elements copied is the minimum of len(src) and len(dst).

编辑:

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

Copy returns the number of elements copied, which will be the minimum of len(src) and len(dst).

关于go - 为什么我不能用 `copy()` 复制 slice ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30182538/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com