Golang new和make的区别

在Go语言中,在实例化时候对象时,有时候会看到newmake这两个关键字,那么它们俩有什么区别呢?都是在什么情况下才会用到这个两个关键字呢?

make仅支持slicemapchannel三种类型的初始化创建,不会初始化为零值,其返回值是所创建类型的本身,而不是新的指针引用。
new对任意类型进行内存创建和初始化,并初始化为零值。其返回值是所创建类型的指针引用。

这样一来,我们知道了,new可以也可以初始化slicemapchannel三种类型,这需要根据实际情况来选择。但是大部分情况下,new函数用得不多。我们来看一个示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package main

import "fmt"

type Person struct {
Name string
}

func main() {
p := Person{Name: "Bob"}
pp := &Person{Name: "Big Bob"}
ppp := new(Person)
mapMake := make(map[int]int, 10)
mapNew := new(map[int]int)
fmt.Println(p, pp, ppp, mapMake, mapNew)
}

最终会打印出

1
{Bob} &{Big Bob} &{} map[] &map[]

我们可以看到,new返回的对象的指针,make返回的是当前对象。在结构体或者slicemapchannel三种类型初始化时,该选择哪种初始化方式,则需要根据自己的情况来定,一般我们对结构体都是通过{}来取代new进行初始化。

作者

eyiadmin

发布于

2022-08-25

更新于

2024-05-31

许可协议

评论