Golang new和 make的區別

2021-09-02 07:34:22 字數 738 閱讀 7053

go提供了兩種分配原語,即new和make。它們所做的事情是不一樣的,所應用的型別也不同。

new用來分配記憶體,但與其他語言中的同名函式不同,它不會初始化記憶體,只會講記憶體置零;也就是說,new(t)會為型別為t的新項分配已置零的記憶體空間,並返回他的位址,也就是乙個型別為*t的值。用go的術語來說,它返回乙個指標,改指標指向新分配的,型別為t的零值;

make的目的不同於new,它只用於slice,map,channel的建立,並返回型別為t(非指標)的已初始化(非零值)的值;出現這種差異的原因在於,這三種型別本質上為引用型別,它們在使用前必須初始化;

小結:

new和make都在堆上分配記憶體,但是它們的行為不同,適用於不同的型別。

make(t)返回乙個型別為 t 的初始值,它只適用於3種內建的引用型別:slice、map 和 channel。

換言之,new 函式分配記憶體,make 函式初始化;下圖給出了區別:

通過實驗,可以更直觀的檢視兩者之間的區別

package main

import "fmt"

func main()

golang new 和make 的區別

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

Golang new和make有啥區別?

func new type typevalue bool new bool false value int32 new int32 0 value float32 new float32 0.0 value string new string 可以看到,對於new,會建立每個型別所對應的零值。但還要...

(一)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...