什么应该使用New()或var in go?

时间:2015-07-21 21:31:29

标签: go

如何为结构创建对象?

object := new(struct)

var object struct

我无法理解何时使用什么?如果两者相同应该优先考虑哪一个?

2 个答案:

答案 0 :(得分:5)

您显示的new语法返回指针,而另一个是值。看看这篇文章; https://golang.org/doc/effective_go.html#allocation_new

实际上甚至还有一个我喜欢的选项。它被称为复合文字,看起来像这样;

object := &struct{}

上面的示例相当于您使用new。关于它的一个很酷的事情是你可以在括号内的struct中为任何属性指定值。

何时使用您需要根据具体情况做出的决定。在Go中,有几个原因我想要一个或另一个;也许只有指针*myType实现某个接口而myType没有,实例myType可能包含大约1 GB的数据,并且您希望确保传递指针而不是值其他方法,等。选择使用哪个取决于用例。虽然我会说,指针很少更糟,因为在这种情况下我几乎总是使用它们。

答案 1 :(得分:4)

当您需要指针对象时,请使用新的或复合文字,否则使用var。

尽可能使用var,因为这更有可能在堆栈中分配,并且一旦作用域结束就会释放内存。我最有可能在堆中分配新内存,需要进行垃圾回收。