登录
首页 >  Golang >  Go问答

new 和 make 和有什么不一样?

来源:Golang技术栈

时间:2023-04-16 10:09:12 107浏览 收藏

小伙伴们对Golang编程感兴趣吗?是否正在学习相关知识点?如果是,那么本文《new 和 make 和有什么不一样?》,就很适合你,本篇文章讲解的知识点主要包括golang。在之后的文章中也会多多分享相关知识点,希望对大家的知识积累有所帮助!

问题内容

New不会初始化内存,它只会将其归零。它返回一个指向新分配的零值的指针。

Make只创建切片、映射和通道,并返回它们初始化。

在这种情况下,“初始化”是什么意思?new 和 make 之间还有哪些其他区别?

正确答案

制作切片、地图和通道中所述:

内置函数 make 采用 type T,它 必须是 slice、map 或 channel 类型 ,可选地后跟特定类型的表达式列表。
它返回一个类型的值T(不是*T)。
内存按照初始值一节中的说明进行初始化。

例如,对于Slice 类型

make([]T, length, capacity)

产生与分配数组并对其进行切片相同的切片,因此这两个表达式是等价的:

make([]int, 50, 100)
new([100]int)[0:50]

所以在这里,make创建切片,并根据使用类型的零值初始化其内容(这里int,所以' 0')

你可以看到更多关于在Go 中保持 new 和 make 分离的需要:我为什么要 make() 或 new()?


Dave cheney 刚刚写了一篇好文章:“ [Go 既有 make 又有 new 功能,什么给了?](http://dave.cheney.net/2014/08/17/go-has-both-make-and-new- functions-what-gives) ”

尽管make创建了泛型slicemapchannel值,但它们仍然 只是常规值; make 不返回指针值

如果new被删除make,你将如何构造一个指向初始化值的指针?

new用于构造 指向slicemapchannel 0 值 的指针现在可以使用,并且与 . 的行为一致new

因为它们可能引起的混乱,make并且new是一致的;

  • make只制作切片、地图和通道,
  • new只返回指向初始化内存的指针。

好了,本文到此结束,带大家了解了《new 和 make 和有什么不一样?》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>