go語言中make 與new 的不同

2021-09-28 17:24:57 字數 563 閱讀 3106

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語言中make和new的區別

make用於內建型別 map slice 和channel 的記憶體分配。new用於各種型別的記憶體分配。內建函式new本質上說跟其他語言中的同名函式功能一樣 new t 分配了零值填充的t型別的記憶體空間,並且返回其位址,即乙個 t型別的值。用go語言的術語說,它返回了乙個指標,指向新分配的型別t...

深入講解Go語言中函式new與make的使用和區別

前言 本文主要給大家介紹了go語言中函式new與make的使用和區別,關於go語言中new和make是內建的兩個函式,主要用來建立分配型別記憶體。在我們定義生成變數的時候,可能會覺得有點迷惑,其實他們的規則很簡單,下面我們就通過一些示例說明他們的區別和使用,話不多說了,來一起看看詳細的介紹吧。變數的...