Go语言学习三:Go基础(iota,array,slice,

make

make用于内建类型(map、slice、channel)的内存分配

make(T,args)与new(T)有着不同的功能,make只能创建slice,map,channel,并且返回一个有初始值(非零)的T类型,而不是*T

new

new用于各种类型的内存分配【new返回指针】

new(T)分配了零值填充的T类型的内存空间,并且返回其地址,即一个*T类型的值(GO语言的术语:返回了一个指针,指向新分配的类型T的零值)

总结:

new 负责分配内存,new(T) 返回*T 指向一个零值 T 的指针

make 负责初始化值,make(T) 返回初始化后的 T ,而非指针
最重要的一点:make 仅适用于slice,map 和channel

关于“零值”,并非是空值,而是一种“变量未填充前”的默认值,通常为0,如下

int  0
int8 0
int32 0
int64 0
uint 0x0
rune 0 //rune的实际类型是 int32
byte 0x0 //byte的实际类型是uint8
float32 0 //长度为4 byte
float64 0 //长度为8 byte
bool false
string ""
文章导航