【点击观看视频】Go 内置函数make和new的区别?
首先纠正下make和new是内置函数,不是关键字
变量初始化,一般包括2步,变量声明 + 变量内存分配,var关键字就是用来声明变量的,new和make函数主要是用来分配内存的
var声明值类型的变量时,系统会默认为他分配内存空间,并赋该类型的零值
比如布尔、数字、字符串、结构体
如果指针类型或者引用类型的变量,系统不会为它分配内存,默认就是nil
。此时如果你想直接使用,那么系统会抛异常
,必须进行内存分配后,才能使用。
new 和 make 两个内置函数,主要用来分配内存空间,有了内存,变量就能使用了,主要有以下2点区别:
使用场景区别:
make 只能用来分配及初始化类型为slice、map、chan 的数据。
new 可以分配任意类型的数据,并且置零。
返回值区别:
make函数原型如下,返回的是slice、map、chan类型本身
这3种类型是引用类型,就没有必要返回他们的指针
func make(t Type, size ...IntegerType) Type
1
new函数原型如下,返回一个指向该类型内存地址的指针
func new(Type) *Type
1