go內建函式new和make的區別

2021-10-07 09:21:54 字數 473 閱讀 1622

new 內建函式分配記憶體。 其第乙個實參為型別,而非值,其返回值為指向該型別的新分配的零值的指標。

make 內建函式分配並初始化乙個型別為且僅為slice、map、或chan的物件。 與 new 相同的是,其第乙個實參為型別,而非值。不同的是,make 的返回型別 與其引數相同,而非指向它的指標。其具體結果取決於具體的型別:

slice:引數size指定了它的長度,該切片的容量等於它的長度。第二個整數實參可用來指定不同的容量,但是容量值不能小於長度值。例如,make(int, 0, 10) 會分配乙個長度為0, 容量為10的切片。

map:乙個空的map可以被分配足夠的空間來儲存指定數量的元素。引數size可以省略,在這種情況下,會分配乙個小的起始大小。

channel:channel的快取根據指定的快取容量初始化。若 size 為零或被省略,該通道即為無快取的。

對內建函式make和new的理解

make用於內建型別 map slice 和channel 的記憶體分配。new用於各種型別的記憶體分配。new就是new 跟所有語言的new一樣的,make主要是用來處理chan 和陣列切片和map對於new出來的結構體會進行初始化,但是如果new乙個切片型別的 new int 那麼這個切片是沒有...

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 語言程式設計 make 和 new

make 和 new 都是 golang 的內建函式,作為用於記憶體分配的原語 allocation primitives 其功能相似,卻有著本質的區別。the new built in function allocates memory.the first argument is a type,n...