new 和 make 是go語言的兩個內建函式,都是用來建立並分配記憶體,new函式只接受乙個引數,這個引數是乙個型別,並且返回乙個指向該型別記憶體位址的指標。而make只能用於 slice、map 和 channel 的初始化,它返回的型別就是這三個型別本身,因為這3個本身就是引用型別,就不需要再返回指標了。
如下所示,使用new的例子:
ii:=3
var in =new(int) //建立乙個*int指標
in=&ii //指向ii的位址
*in=4 //這裡修改指標所指向的內容,則ii也跟著變化。
fmt.println(in,ii)
如下所示,使用make的例子:
sl:=make(int,2)
sm:=make(map[string]int)
sc:=make(chan int 2)
另外,正因為slice,map,channel這三個型別是引用型別,所以在相同變數之間賦值後,就是兩個變數指向同一塊記憶體,可以達到修改乙個變數同時變化的目的。比如:
s1:=int
s2:=make(int,2)
s2=s1 //因為切片是引用型別,所以這裡直接賦值後,s2就是和s1同一塊記憶體了。
s2[0]=5 //這裡修改s2裡第乙個的元素,則s1也會跟著變化。
go語言中make和new的區別
make用於內建型別 map slice 和channel 的記憶體分配。new用於各種型別的記憶體分配。內建函式new本質上說跟其他語言中的同名函式功能一樣 new t 分配了零值填充的t型別的記憶體空間,並且返回其位址,即乙個 t型別的值。用go語言的術語說,它返回了乙個指標,指向新分配的型別t...
Go語言中new 和 make 的區別詳解
概述 go 語言中的 new 和 make 一直是新手比較容易混淆的東西,咋一看很相似。不過解釋兩者之間的不同也非常容易。new 的主要特性 首先 new 是內建函式,你可以從 這兒看到它,它的定義也很簡單 複製 如下 func new type type 官方文件對於它的描述是 複製 如下 內建函...
Go語言new和make的區別
go有兩種分配原語,分別為new和make。他們做的事情不同,並且處理不同的型別,這看上去讓人感到困惑,但是規則相當簡單。new是乙個用來分配記憶體的內建函式 c 中是運算子 但他和大多數其他語言不同,new不會初始化記憶體 c 中會分配並呼叫建構函式 而是將記憶體歸0 也就是初始化成0 即,new...