a = make([]int, 7, 15)
创建大小为15
的隐式数组,slice(a
)创建隐式数组的浅表副本,并指向数组中的前7个元素。
考虑,
var a []int;
创建一个零长度切片,不指向任何隐式数组。
a = append(a, 9, 86);
创建长度为2的新隐式数组,并附加值9
和86
。 slice(a
)指向新的隐式数组,其中
len(a) is 2
和cap(a) >= 2
我的问题:
这是正确的理解吗?
答案 0 :(得分:1)
正如我提到的“Declare slice or make slice?”,切片的零值(nil)就像一个零长度切片。
因此,您可以直接附加到a []int
。
只有在您想要返回空切片(而不是make([]int, 0)
)时,才需要创建切片(nil
)。
如果没有,在开始追加之前不需要分配内存
另请参阅“Arrays, slices (and strings): The mechanics of 'append': Nil”
零切片在功能上等同于零长度切片,即使它指向任何东西。它的长度为零,可以通过分配附加到。