new 和 make 的區別

2021-08-17 16:44:38 字數 626 閱讀 4484

看起來二者沒有什麼區別,都在堆上分配記憶體,但是它們的行為不同,適用於不同的型別。

make(t) 返回乙個型別為 t 的初始值,它只適用於3種內建的引用型別:切片、map 和 channel。

換言之,new 函式分配記憶體,make 函式初始化;下圖給出了區別:

var v int = make(int,10,50)

v := make(int,10,50)
這樣分配乙個有 50 個 int 值的陣列,並且建立了乙個長度為 10,容量為 50 的 切片 v,該 切片 指向陣列的前 10 個元素。

和陣列一樣,切片通常也是一維的,但是也可以由一維組合成高維。通過分片的分片(或者切片的陣列),長度可以任意動態變化,所以 go 語言的多維切片可以任意切分。而且,內層的切片必須單獨分配(通過 make 函式)。

make和new的區別

二者異同 所以從這裡可以看的很明白了,二者都是記憶體的分配 堆上 但是make只用於slice map以及channel的初始化 非零值 而new用於型別的記憶體分配,並且記憶體置為零。所以在我們編寫程式的時候,就可以根據自己的需要很好的選擇了。make返回的還是這三個引用型別本身 而new返回的是...

golang中new和make區別

golang 中有兩個記憶體分配機制 new和make,二者有明顯區別 make 返回乙個初始化的例項,返回的是乙個例項,而不是指標,其只能用來初始化 slice,map和channel三種型別 package main import fmt func main 通過這個例子可以看出,當對slice...

Go語言new和make的區別

go有兩種分配原語,分別為new和make。他們做的事情不同,並且處理不同的型別,這看上去讓人感到困惑,但是規則相當簡單。new是乙個用來分配記憶體的內建函式 c 中是運算子 但他和大多數其他語言不同,new不會初始化記憶體 c 中會分配並呼叫建構函式 而是將記憶體歸0 也就是初始化成0 即,new...