(惯用语?)new(T) 和 &T{...} 之间的区别?

(Idiomatic?) Difference between new(T) and &T{...}?

我开始玩 Go,对 new 函数有点恼火。它似乎非常有限,尤其是在考虑具有匿名字段或内联初始化的结构时。所以我通读了规范 stumbled over the following paragraph:

Calling the built-in function new or taking the address of a composite literal allocates storage for a variable at run time.

所以我怀疑 new(T)&T{} 的行为方式完全相同,对吗?如果这是正确的,在什么情况下应该使用 new

是的,你是对的。 new 对结构没那么有用。但它与其他基本类型有关。 new(int) 会给你一个指向零值 int 的指针,你不能做 &int{} 或类似的事情。

无论如何,根据我的经验,您很少需要它,因此很少使用 new。您可以只声明一个普通的 int 并传递一个指向它的指针。事实上,这样做可能更好,因为编译器会为您决定在堆栈中分配还是在堆中分配。