我有两个数组声明为: var input []stringvar output []string.

输入数组最初填充了一些ID.输出数组为空.

在每次迭代之后,我希望从输入数组中删除一个随机元素,并将其添加到输出数组中.

最后,输出数组中的所有元素都将与输入数组相同(但顺序(索引)不同).

for index := 0; index < len(input); index++ {
    if !visited[index] {
        //do something
    }
}
output[#iteration index] = input[current index]

当我try 这样做时,我得到array out of bounds error分.

推荐答案

对于output数组,您需要使用append或为其分配初始容量以匹配input的大小.

// before the loop
output := make([]string, len(input))

这是我的建议,因为append会导致大量不必要的重新分配,而且你已经知道你需要什么容量,因为它基于input.

另一件事是:

output = append(output, input[index])

但正如我所说,从我观察到的情况来看,append的初始容量呈指数增长.如果您没有指定任何内容,这意味着在达到所需容量之前,您将进行几次不必要的重新分配,那么这将是基数2.

Go相关问答推荐

如果添加构建标签,gopls将停止工作

如何在定制普罗米修斯出口商中测试动态计量注册?

如何预编译Golang标准库?

Golang应用程序:所请求的资源上不存在HTTP-Control-Allow-Origin标头

将类型定义为泛型类型实例化

重新赋值变量时未清除动态类型-这是错误吗?

为什么 `go mod` 占用了另一个磁盘上的空间而不是我的 GOPATH?

Go 是否提供了标准或事实上的方法来处理单个语句中的错误(即内联错误处理)?

3 字节切片和有符号整数类型之间的转换

用于提取 <*n 的正则表达式(其中 n 是一个数字)

从给定顶点查找图形中所有闭合路径的算法

缺少签名帮助文档

Dockerfile 问题 - 为什么找不到二进制 dlv - 没有这样的文件或目录

如何将多个切片打印为一个切片?

Golang泛型在用作 map 元素时不起作用

Gorm 在保存/创建时序列化 struct

分配空切片而不引用其类型?

go mod tidy 错误消息:但是 go 1.16 会 Select

无法识别同步错误.使用一次

map和struct golang的合并