1. 程式人生 > >go語言中make與new操作

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返回初始化後的(非零)值。

 

上圖為make和new對底層的記憶體分配(slice、map、channel本身即為引用型別,所以返回的還是其本身)