go語言中make和new的區別

make用於內建類型(map、slice 和channel)的內存分配。new用於各類類型的內存分配。數據結構

內建函數new本質上說跟其餘語言中的同名函數功能同樣:new(T)分配了零值填充的T類型的內存空間,而且返回其地址,即一個*T類型的值。用Go語言的術語說,它返回了一個指針,指向新分配的類型T的零值。因此咱們須要記住這一點:
new返回指針。函數

內建函數make(T, args)與new(T)有着不一樣的功能,make只能建立slice、map和channel,而且返回一個有初始值(非零)的T類型,而不是*T。指針

致使這三個類型有所不一樣的緣由是,指向數據結構的引用在使用前必須被初始化。例如,一個slice,是一個包含指向數據(內部array)的指針、長度和容量的三項描述符,在這些項目被初始化以前,slice爲nil。對於slice、map和channel來講,make初始化了內部的數據結構,填充適當的值。內存

make返回初始化後的(非零)值。map

相關文章
相關標籤/搜索