跳至主要內容

Go 语言中的 new 和 make 的区别

逸尘.Lycodx大约 1 分钟后端go

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

然后我们直接打印stri,会输入一个""0,这就是stringint类型的零值,还有很多,再比如:bool的零值是false, 引用类型的零值是nil等等。

四、其他

在实际的编程种其实new并不常用,因为我们可以使用简短的声明替代new,比如:

i := 0
str := ""

但是make则是无可替代的,我们在使用chan、map、slice时一定要用make进行初始化才能使用。

上次编辑于: