初始化变量一般分为两步:变量声明 + 变量内存分配,在 Go 语言中 var
关键字用来声明变量的,若声明变量是值类型系统会默认为他分配内存空间,并赋该类型的零值。
如果是声明指针类型或者引用类型的变量,系统不会为它分配内存,默认就是 nil
。如果此时使用该变量将导致系统异常奔溃,即必须进行内存分配后才能使用。而 make
和 new
两个函数的作用是用来分配内存空间的。
其中 make
只能用来分配及初始化类型为 slice
、map
、chan
的变量,而 new
可以分配任意类型的数据,并且置零。
make
函数返回的是 slice、map、chan 类型本身,它们是引用类型,就没有必要返回他们的指针;而 new
函数的则返回一个指向该类型内存地址的指针。
// make
func make(t Type, size ...IntegerType) Type
// new
func new(Type) *Type