3 回答
TA贡献1936条经验 获得超6个赞
slice 的结构是这样的:
struct Slice
{ // must not move anything
byte* array; // actual data
uintgo len; // number of elements
uintgo cap; // allocated number of elements
};
在你的例子中。解释如下:
orgArray := [3]string{"00", "01", "02"}
s := orgArray[:2]
fmt.Println(len(s),cap(s)) //2,3 s is pointer to orgArray
s = append(s, "03")
fmt.Println(len(s),cap(s)) //3,3 cap is enough. s is pointer to orgArray
s = append(s, "04")
fmt.Println(len(s),cap(s)) //4,6 cap is not enough. regenerate array. then s point to the new array.
TA贡献2080条经验 获得超4个赞
s := orgArray[:2]
由于您从原始切片中取出两个元素,然后再添加两个元素,因此长度变为 4。您可以在此处看到四个元素:
fmt.Println(s) //[00 01 03 04]
如果您想知道为什么容量是 6,那是因为容量以 2 的幂增加。所以如果您有一个容量为 4 的切片并附加 5 个元素,容量将变为 8。这与尝试重新分配内存有关发生 append 时经常出现的切片。
- 3 回答
- 0 关注
- 181 浏览
添加回答
举报