【问题标题】:How slice works in GO?slice 在 GO 中是如何工作的?
【发布时间】:2017-06-13 20:54:07
【问题描述】:
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


我的问题:

这是正确的理解吗?

【问题讨论】:

  • 您可能需要完成“Tour of Go”(tour.golang.org),尤其是切片部分。

标签: arrays go slice


【解决方案1】:

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

所以你可以直接追加到a []int

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-03
    • 1970-01-01
    • 2015-01-20
    • 2011-11-05
    • 2014-12-12
    • 1970-01-01
    相关资源
    最近更新 更多