arrays - slice 在 GO 中是如何工作的?

标签 arrays go slice

a = make([]int, 7, 15)

创建大小为 15 的隐式数组,slice(a) 创建隐式数组的浅拷贝并指向数组中的前 7 个元素。

考虑一下,

var a []int;

创建一个不指向任何隐式数组的零长度 slice 。

a = append(a, 9, 86);

创建长度为 2 的新隐式数组并附加值 986。 slice(a) 指向新的隐式数组,其中

len(a) 为 2cap(a) >= 2


我的问题:

这样理解对吗?

最佳答案

正如我提到的“Declare slice or make slice?”, slice 的零值 (nil) 就像一个零长度 slice 。

因此您可以直接附加到 a []int

仅当您希望可能返回一个空 slice (而不是nil)时,您才需要创建一个 slice (make([]int, 0) )。
如果不是,则无需在开始追加之前分配内存。
另见“Arrays, slices (and strings): The mechanics of 'append': Nil

a nil slice is functionally equivalent to a zero-length slice, even though it points to nothing. It has length zero and can be appended to, with allocation.

关于arrays - slice 在 GO 中是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41906439/

相关文章:

Go Modules 无法识别 GOPATH 下的文件

go - Delve 是否支持更改或某些变体的热交换?

ios - 如何在 iOS 中按索引将数组添加到数组中?

javascript - 过滤对象并将其添加到数组中而不重复

java - 似乎无法修复我的 'java.lang.ArrayIndexOutOfBoundsException' 错误

javascript - 在第 n 次出现的字符处剪切字符串

python - 切片 3d numpy 数组并设置像素的 RGB 值

php - 递归搜索返回存在值的所有键

go - 无法使用ecdsa软件包验证ECDSA签名

python - Numpy数组切片转置内部数据