Go 语言中的 new 和 make 的区别
大约 1 分钟
Go 语言中的 new 和 make 的区别
提示
Go语言中 new 和 make 是两个内置函数,主要用来创建并分配类型的内存
一、适用范围
make 只能用于chan、map、slice三种类型。
arr := make([]string, 1, 1)
new 可以用于任何类型。
i := new(int)
二、返回值
make 返回的是引用类型。
func make(t Type, size ...IntegerType) Type
new 返回的是类型的指针。
func new(Type) *Type
思考
为什么 make 的返回是引用类型呢?因为chan map slice 本身就是引用类型的
三、初始化
make 分配空间后会进行初始化 。
思考
为什么make分配空间后要初始化呢?因为 chan map slice 是引用类型,所以必须初始化
new 分配的空间被清零,也称置零。
什么是零值?
我们在通过关键字声明变量时,列如:
var str string
var i int
然后我们直接打印str和i,会输入一个""和0,这就是string和int类型的零值,还有很多,再比如:bool的零值是false, 引用类型的零值是nil等等。
四、其他
在实际的编程种其实new并不常用,因为我们可以使用简短的声明替代new,比如:
i := 0
str := ""
但是make则是无可替代的,我们在使用chan、map、slice时一定要用make进行初始化才能使用。