go語言中new和make區別

2021-10-01 12:22:41 字數 647 閱讀 5130

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