【发布时间】:2017-03-14 19:55:46
【问题描述】:
根据https://play.golang.org/p/7RPExbwOEU,它们都打印相同并且具有相同的长度和容量。三种初始化切片的方式有区别吗?有首选方法吗?我发现自己使用 make([]int, 0) 和 []int{} 的频率相同。
【问题讨论】:
根据https://play.golang.org/p/7RPExbwOEU,它们都打印相同并且具有相同的长度和容量。三种初始化切片的方式有区别吗?有首选方法吗?我发现自己使用 make([]int, 0) 和 []int{} 的频率相同。
【问题讨论】:
这会初始化一个长度为 0 的切片。
make([]int, 0)
使用make 是初始化具有不同于长度的特定容量的切片的唯一方法。这分配了一个长度为 0,但容量为 1024 的切片。
make([]int, 0, 1024)
这是一个切片文字,它也初始化一个长度为 0 的切片。使用这个或make([]int, 0) 是唯一的偏好。
[]int{}
这会初始化一个指向切片的指针,该切片会立即被取消引用。 slice 本身还没有初始化,仍然是 nil,所以这基本上什么都不做,相当于[]int(nil)
*new([]int)
【讨论】:
new 无法初始化切片。切片的零值是 nil,因此您会得到一个指向 nil 切片的初始化指针。 play.golang.org/p/lVL9Tkxk_D