Golang new和make有啥區別?

2021-10-23 20:19:43 字數 992 閱讀 9492

func new(type) *type
value_bool := new(bool) // false

value_int32 := new(int32) // 0

value_float32 := new(float32) // 0.0

value_string := new(string) // ""

可以看到,對於new,會建立每個型別所對應零值。但還要注意的是,new會返回乙個指標,所以在訪問資料之前,需要先將其解引用

func make(type, size integertype) type
value_slice := make(int, 10, 10) // [0 0 0 0 0 0 0 0 0 0]

value_map := make(map[int32]string, 10) // map

value_chan := make(chan int, 10) // 由於每次的位址不同,故不演示。

對於make,只能用於slice,map和channel這三種型別上,且返回的是

所以為什麼go不直接用new還要搞乙個make呢?因為go沒有建構函式,如果直接使用new建立slice,map和channel這三種型別引用型別的話,只會建立乙個指向nil的指標。就比如slice是引用乙個底層陣列的,但是陣列都沒建立,於是只能指向nil。而make可以對其進行初始化。

new僅分配記憶體然後置0,不進行任何初始化操作,最後返回指標。而make只能用於slice,map和channel這三種型別,並且會進行初始化操作,返回引用。

Golang new和 make的區別

go提供了兩種分配原語,即new和make。它們所做的事情是不一樣的,所應用的型別也不同。new用來分配記憶體,但與其他語言中的同名函式不同,它不會初始化記憶體,只會講記憶體置零 也就是說,new t 會為型別為t的新項分配已置零的記憶體空間,並返回他的位址,也就是乙個型別為 t的值。用go的術語來...

golang new 和make 的區別

1.go語言中new跟make是內建函式,主要用來建立分配型別記憶體。2.new t 建立乙個沒有任何資料的型別為t的例項,並返回該例項的指標 3.make t,args 只能建立 slice map和channel,並且返回乙個有初始值args 非零 的t型別的例項,非指標。4.二者都是記憶體的分...

(一)make之make和makefile初識

1.1 make 和makefile 1.1.1 make make 是乙個應用程式 1.1.2 makefile makefile是乙個描述檔案 1.1.3 makefile本質 makefile實際就是乙個指令碼程式,類似於shell指令碼。由於 塊中沒有make的,所以用bash來代替make...