對內建函式make和new的理解

2021-08-21 15:36:19 字數 311 閱讀 7326

make用於內建型別(map、slice 和channel)的記憶體分配。new用於各種型別的記憶體分配。

new就是new ,跟所有語言的new一樣的,make主要是用來處理chan 和陣列切片和map

對於new出來的結構體會進行初始化,但是如果new乙個切片型別的: new(int),那麼這個切片是沒有底層陣列的支援是不能使用的

如果new乙個結構體裡面有指標的話,那麼這個指標型別初始值是nil,如果乙個結構體裡面還有其他的結構體,那麼巢狀的結構體都會進行初始化。注意new返回的是指標型別,但是如果是make的話,返回的是引用

go內建函式new和make的區別

new 內建函式分配記憶體。其第乙個實參為型別,而非值,其返回值為指向該型別的新分配的零值的指標。make 內建函式分配並初始化乙個型別為且僅為slice map 或chan的物件。與 new 相同的是,其第乙個實參為型別,而非值。不同的是,make 的返回型別 與其引數相同,而非指向它的指標。其具...

new 和 make 的區別

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

make和new的區別

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