我需要在GO中复制一份切片,然后阅读文档,那里有一个copy函数可供我使用.

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]

你可以在GOplayground上判断.那么为什么我不能复制切片呢?

推荐答案

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

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

try 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:

复制的元素数至少为len(src)len(dst).

Edit:

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

COPY返回复制的元素数,它将是len(Src)和len(Dst)的minimum.

Go相关问答推荐

如何在gocql中设置gocqlSYS标志?

Golang Cososdb-gremlin连接

Go Fiber和HTMX—HX—Trigger header被更改为HX—Trigger,这不是HTMX监听的内容

AWS S3 SelectObjectContent在AWS SDK v2 for Go中不返回结果

Hugo错误:没有为此项目配置现有内容目录

提供的client_secret与此帐户上任何关联的SetupIntent都不匹配

Golang telegram 机器人

testcontainers:如何修复绑定源路径不存在

使用 ssh 从私有 gilab 仓库导入一个 go 项目:未知修订

查找、解析和验证邮箱地址

fmt.Printf() 标志 '0' 不会被字符串忽略

GRPC 元数据未在 Go 中更新

如何将一片十六进制字节转换为整数

将shell输出绑定到Go中的 struct 的最佳方法?

使用 package`regexp` 查找 Golang 中的所有 mactch 子字符串,但得到意外结果

如何在测试中使用自定义标志(使用`testify/suite`)

无法在 GORM 中排序

使用正则表达式拆分具有相同标题的数据块

测试包外文件时的 Golang 测试覆盖率

如何从应用程序调用谷歌云身份 API