make和new的區別

2021-10-03 05:10:26 字數 436 閱讀 2560

二者異同

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

make返回的還是這三個引用型別本身;而new返回的是指向型別的指標。

其實new不常用

所以有new這個內建函式,可以給我們分配一塊記憶體讓我們使用,但是現實的編碼中,它是不常用的。我們通常都是採用短語句宣告以及結構體的字面量達到我們的目的,比如:

i:=

0u:=user

這樣更簡潔方便,而且不會涉及到指標這種比麻煩的操作。

make函式是無可替代的,我們在使用slice、map以及channel的時候,還是要使用make進行初始化,然後才才可以對他們進行操作。

new 和 make 的區別

看起來二者沒有什麼區別,都在堆上分配記憶體,但是它們的行為不同,適用於不同的型別。make t 返回乙個型別為 t 的初始值,它只適用於3種內建的引用型別 切片 map 和 channel。換言之,new 函式分配記憶體,make 函式初始化 下圖給出了區別 var v int make int,1...

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...