arrays - 如何在 Go 中分配非常量大小的数组

标签 arrays go

如何在 Go 中分配具有运行时大小的数组?

以下代码是非法的:

 n := 1
 var a [n]int

您会收到消息 prog.go:12: invalid array bound n (或类似的),而这工作正常:

 const n = 1
 var a [n]int

问题是,我可能直到运行时才知道我想要的数组的大小。

(顺便说一句,我首先在问题 How to implement resizable arrays in Go 中寻找答案,但这是一个不同的问题。)

最佳答案

答案是你不直接分配一个数组,你可以在创建一个时让Go为你分配一个 slice

内置函数make([]T, length, capacity)创建一个 slice 和它后面的数组,而且没有(傻)编译—— lengthcapacity 值的时间常数限制。正如 Go language specification 中所说:

A slice created with make always allocates a new, hidden array to which the returned slice value refers.

所以我们可以这样写:

 n := 12
 s := make([]int, n, 2*n)

并分配一个大小为 2*n 的数组,其中 s slice 初始化为它的前半部分。

我不确定为什么 Go 不直接分配数组 [n]int ,因为你可以间接地做到这一点,但答案很明确:“在 Go 中,使用 slice 而不是数组(大部分时间)。"

关于arrays - 如何在 Go 中分配非常量大小的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23290858/

相关文章:

go - 在以下任何位置都找不到软件包“golang.org/x/sys/unix”:$ GOROOT $ GOPATH

arrays - 为每个数组访问/打印子数组的第 n 个元素

javascript - 多选组合框在 Javascript 中转换为字符串

go - 不能在 GoClipse 中使用包

go - 如何在 Go 中使用 Cli 访问一组命令?

algorithm - 为什么我的 GoLang 算法会无限循环?

json - 使用 Go 在 JSON 中解析包含 unicode 字符的键

python - 高效的一维数组比较、缩放和求和

java - 从数组中获取最后一个元素

c - C语言循环过程中数组元素的值会自行改变