Golang new和make的区别
在Go语言中,在实例化时候对象时,有时候会看到new
和make
这两个关键字,那么它们俩有什么区别呢?都是在什么情况下才会用到这个两个关键字呢?
make
仅支持slice
、map
、channel
三种类型的初始化创建,不会初始化为零值,其返回值是所创建类型的本身,而不是新的指针引用。new
对任意类型进行内存创建和初始化,并初始化为零值。其返回值是所创建类型的指针引用。
这样一来,我们知道了,new
可以也可以初始化slice
、map
、channel
三种类型,这需要根据实际情况来选择。但是大部分情况下,new
函数用得不多。我们来看一个示例
1 | package main |
最终会打印出
1 | {Bob} &{Big Bob} &{} map[] &map[] |
我们可以看到,new
返回的对象的指针,make
返回的是当前对象。在结构体或者slice
、map
、channel
三种类型初始化时,该选择哪种初始化方式,则需要根据自己的情况来定,一般我们对结构体都是通过{}
来取代new
进行初始化。
Golang new和make的区别