Go 面试题: new 和 make 是什么,差异在哪?
newmake
newmake
在这篇文章中我们将来解答这个问题。
基本特性
make
makeslicemapchannel
函数签名如下:
具体使用示例:
make
这块的区别主要是长度(len)和容量(cap)的指定,有的类型是没有容量这一说法,因此自然也就无法指定。
输出结果:
make
见过不少的小伙伴在这上面踩坑。
new
newmake
函数签名如下:
具体使用示例:
从上面的例子的效果来看,是不是似曾相似?其实与下面这种方式的一样的:
输出结果均是:
new
T{}
这种初始化方式更方便。
区别在哪里
newmake
make
makeslicechanmapnew
map
更进一步的区别:
makechannelmapslicemakenew
总结
makenew
newmake
这就涉及到 Go 语言中的 “逃逸分析” 了(我公众号前几天的文章有发),如果所初始化的变量不需要在当前作用域外生存,那么理论上就不需要初始化在堆上。