2017-03-14 209 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

相關問題