Go 語言程式設計 make 和 new

2021-10-08 08:12:47 字數 1200 閱讀 7311

make 和 new 都是 golang 的內建函式,作為用於記憶體分配的原語(allocation primitives),其功能相似,卻有著本質的區別。

// the new built-in function allocates memory. the first argument is a type,

// not a value, and the value returned is a pointer to a newly

// allocated zero value of that type.

func

new(type)

*type

make 只能用於為 slice、map 或 channel 型別分配記憶體並進行初始化,所以其除了第乙個引數傳入乙個型別之外,還可以傳入用於完成初始化的可變長的 size 實參。跟 new 不同的是,make 返回型別的引用而不是指標,而返回值也依賴於具體傳入的型別。

//the make built-in function allocates and initializes an object 

//of type slice, map, or chan (only). like new, the first argument is

// a type, not a value. unlike new, make's return type is the same as

// the type of its argument, not a pointer to it.

func

make

(t type, size ...integertype) type

先來看一下以上三個資料結構的原始碼:

type slice struct

type hmap struct

type hchan struct

可見,上述三個型別的背後都引用了使用前必須完成初始化的成員資料結構。如果我們使用常規的方式建立變數(e.g.var map1 [string]int)的話,很可能會出現僅僅宣告了,但卻沒有完成初始化的定義,從而在後續的**中留下錯誤的隱患。而 make() 函式,時刻提供我們完成乙個切實的變數定義(宣告並初始化)。

go語言的new和make

golang的new和make主要區別如下 effective go舉了乙個例子,見 對於struct的分配和初始化,除了可以使用new外,還可以這樣做 t 例如 func testalloc t testing.t var t1 t t1 new t fmt.println t1 t2 t fmt...

go語言中new和make區別

new 和 make 是go語言的兩個內建函式,都是用來建立並分配記憶體,new函式只接受乙個引數,這個引數是乙個型別,並且返回乙個指向該型別記憶體位址的指標。而make只能用於 slice map 和 channel 的初始化,它返回的型別就是這三個型別本身,因為這3個本身就是引用型別,就不需要再...

Go語言new和make的區別

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