看起來兩者沒有什麼區別,都在堆上分配內存,可是它們的行爲不一樣,適用於不一樣的類型。數組
&T{}
。換言之,new 函數分配內存,make 函數初始化;下圖給出了區別:函數
上兩個圖:spa
上圖中:指針
var p *[]int = new([]int) // *p == nil; with len and cap 0 p := new([]int)
在下圖中, p := make([]int, 0)
,切片 已經被初始化,可是指向一個空的數組。code
以上兩種方式實用性都不高。下面的方法:blog
var v []int = make([]int, 10, 50)
或者內存
v := make([]int, 10, 50)
這樣分配一個有 50 個 int 值的數組,而且建立了一個長度爲 10,容量爲 50 的 切片 v,該 切片 指向數組的前 10 個元素。it