切片如何在GO中起作用?

时间:2017-01-28 04:49:55

标签: arrays go slice

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

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

考虑,

var a []int;

创建一个零长度切片,不指向任何隐式数组。

a = append(a, 9, 86);

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

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

我的问题:

这是正确的理解吗?

1 个答案:

答案 0 :(得分:1)

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

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

只有在您想要返回空切片(而不是make([]int, 0))时,才需要创建切片(nil)。
如果没有,在开始追加之前不需要分配内存 另请参阅“Arrays, slices (and strings): The mechanics of 'append': Nil

  

零切片在功能上等同于零长度切片,即使它指向任何东西。它的长度为零,可以通过分配附加到。