首先纠正一下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
new
函数原型如下,返回一个指向该类型内存地址的指针
func new(Type) *Type