如何为结构创建对象?
object := new(struct)
或
var object struct
我无法理解何时使用什么?如果两者相同应该优先考虑哪一个?
答案 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,因为这更有可能在堆栈中分配,并且一旦作用域结束就会释放内存。我最有可能在堆中分配新内存,需要进行垃圾回收。