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返回初始化後的(非零)值。
go語言中new和make區別
new 和 make 是go語言的兩個內建函式,都是用來建立並分配記憶體,new函式只接受乙個引數,這個引數是乙個型別,並且返回乙個指向該型別記憶體位址的指標。而make只能用於 slice map 和 channel 的初始化,它返回的型別就是這三個型別本身,因為這3個本身就是引用型別,就不需要再...
Go語言中函式new與make的使用和區別
大家都知道go語言中的函式new與函式make一直是新手比較容易混淆的東西,看著相似,但其實不同,不過解釋兩者之間的不同也非常容易,下面這篇文章主要給大家介紹了關於go語言中函式new與make區別的相關資料,需要的朋友可以參考下。本文主要給大家介紹了go語言中函式new與make的使用和區別,關於...
Go語言中new 和 make 的區別詳解
概述 go 語言中的 new 和 make 一直是新手比較容易混淆的東西,咋一看很相似。不過解釋兩者之間的不同也非常容易。new 的主要特性 首先 new 是內建函式,你可以從 這兒看到它,它的定義也很簡單 複製 如下 func new type type 官方文件對於它的描述是 複製 如下 內建函...