golang 内置函数new()和make()的区别

转载 学习 GO
阅读数: 639 2019年05月30日

new
func new(Type) *Type
即内建函数 new 用来分配内存,它的第一个参数是一个类型,不是一个值,它的返回值是一个指向新分配类型零值的指针

make
func make(t Type, size ...IntegerType) Type
即内建函数 make 用来为 slice,map 或 chan 类型分配内存和初始化一个对象(注意:只能用在这三种类型上),跟 new 类似,第一个参数也是一个类型而不是一个值,跟 new 不同的是,make 返回类型的引用而不是指针,而返回值也依赖于具体传入的类型,

new和其他语言中的同名函数一样:
new(t)分配了零值填充的T类型的内存空间,并且返回其地址,即一个*t类型的值。
它并不初始化内存,只是将其置零。*t指向的内容的值为零(zero value)。注意并不是指针为零。

make(t, args)与new(t)的功能区别是,make只能创建slice、map和channel,并且返回一个初始化的(而不是置零),类型为t的值(而不是*t)。
而只有make 用于可以初始化其内部的数据结构并准备好将要使用的值。

参考资料
https://blog.csdn.net/MaxCoderLlj/article/details/80218025
phpriji.cn | 网站地图 | 沪ICP备17015433号-1