Go 面试题: new 和 make 是什么,差异在哪?

newmake
newmake

在这篇文章中我们将来解答这个问题。

基本特性

make

makeslicemapchannel

函数签名如下:

具体使用示例:

make

这块的区别主要是长度(len)和容量(cap)的指定,有的类型是没有容量这一说法,因此自然也就无法指定。

输出结果:

make

见过不少的小伙伴在这上面踩坑。

new

newmake

函数签名如下:

具体使用示例:

从上面的例子的效果来看,是不是似曾相似?其实与下面这种方式的一样的:

输出结果均是:

new
T{}

这种初始化方式更方便。

区别在哪里

newmake
make
makeslicechanmapnew
map

更进一步的区别:

makechannelmapslicemakenew

总结

makenew
newmake

这就涉及到 Go 语言中的 “逃逸分析” 了(我公众号前几天的文章有发),如果所初始化的变量不需要在当前作用域外生存,那么理论上就不需要初始化在堆上。