我开始和Go开玩笑,对new
函数有点恼火。它似乎非常有限,特别是在考虑具有匿名字段或内联初始化的结构时。所以我仔细阅读了规范和stumbled over the following paragraph:
调用内置函数new或获取复合文字的地址在运行时为变量分配存储空间。
所以我怀疑new(T)
和&T{}
会以完全相同的方式行事,这是正确的吗?如果这是正确的,在什么情况下应该new
使用?
答案 0 :(得分:5)
是的,你是对的。 new
对结构没有用处。但它与其他基本类型有关。 new(int)
会为您指向零值int
,但您无法&int{}
或类似。
无论如何,根据我的经验,你很少想要这样,所以很少使用new
。你可以声明一个普通的int
并传递指向它的指针。事实上,这样做可能更好,因为你可以解放在堆栈中和堆中分配,因为编译器会为你决定。