2017-03-14 194 views

回答

6

这初始化一个0长度的片。

make([]int, 0) 

使用make是初始化切片具有比长度不同的特定容量的唯一途径。这个分配具有0长度的片,但1024

make([]int, 0, 1024) 

的容量这是文字的切片,其还初始化一个0长度的片。使用此或make([]int, 0)是完全优先。

[]int{} 

这初始化了一个指针到切片,其被立即取消引用。切片本身并没有被初始化,并仍然是零,所以这基本上是什么都不做,而且相当于[]int(nil)

*new([]int) 
+0

最后一位不对。根据规范:“内建函数new采用T类型,在运行时为该类型的变量分配存储空间,并返回一个指向它的类型* T的值。该变量的初始化如初始值“。所以* new([] int)应该等价于[] int {}。 – Adrian

+0

@Adrian:'new'无法初始化切片。一个slice的零值是零,所以你得到一个初始化指针到一个零片。 https://play.golang.org/p/lVL9Tkxk_D – JimB

+0

啊,公平点。有时候很容易混淆片和数组的机制。 – Adrian

相关问题