• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Go语言的 make 和 new

Go 海叔叔 1天前 4次浏览 已收录 0个评论

new 和 make 是两个内置函数,主要用来创建并分配类型的内存。在我们定义变量的时候,可能会觉得有点迷惑,不知道应该使用哪个函数来声明变量,其实他们的规则很简单,
new 只分配内存,make 只能用于 slice、map 和 channel 的初始化。
下面我们就来具体介绍一下

new

在Go语言中,new 函数描述如下:

从上面的代码可以看出,new 函数只接受一个参数,这个参数是一个类型,并且返回一个指向该类型内存地址的指针。同时 new 函数会把分配的内存置为零,也就是类型的零值。
【示例】使用 new 函数为变量分配内存空间。

当然,new 函数不仅仅能够为系统默认的数据类型,分配空间,自定义类型也可以使用 new 函数来分配空间,如下所示:

这里如果我们不使用 new 函数为自定义类型分配空间(将第 7 行注释),就会报错:

这就是 new 函数,它返回的永远是类型的指针,指针指向分配类型的内存地址。

make

make 也是用于内存分配的,但是和 new 不同,它只用于 chan、map 以及 slice 的内存创建,而且它返回的类型就是这三个类型本身,而不是他们的指针类型,因为这三种类型就是引用类型,所以就没有必要返回他们的指针了。
在Go语言中,make 函数的描述如下:

通过上面的代码可以看出 make 函数的 t 参数必须是 chan(通道)、map(字典)、slice(切片)中的一个,并且返回值也是类型本身。
注意:make 函数只用于 map,slice 和 channel,并且不返回指针。如果想要获得一个显式的指针,可以使用 new 函数进行分配,或者显式地使用一个变量的地址。Go语言中的 new 和 make 主要区别如下:
* make 只能用来分配及初始化类型为 slice、map、chan 的数据。new 可以分配任意类型的数据;
* new 分配返回的是指针,即类型 *Type。make 返回引用,即 Type;
* new 分配的空间被清零。make 分配空间后,会进行初始化;

用法

当我们创建slice,map,channel数据类型的时候,我们会用make来创建。new一般用来给自定义的数据类型申请内存空间,不过在实际情况中用的会比较少,一般我们会用 &struct{} 这种方法初始化我们自定义的数据结构。


喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址