【发布时间】:2015-07-22 18:40:01
【问题描述】:
如何为结构创建对象?
object := new(struct)
或
var object struct
我不明白什么时候用什么?如果两者相同,应该首选哪一个?
【问题讨论】:
标签: go
如何为结构创建对象?
object := new(struct)
或
var object struct
我不明白什么时候用什么?如果两者相同,应该首选哪一个?
【问题讨论】:
标签: go
您显示的new 语法返回一个指针,而另一个是一个值。在这里查看这篇文章; https://golang.org/doc/effective_go.html#allocation_new
实际上,我更喜欢另一种选择。它被称为复合文字,看起来像这样;
object := &struct{}
上面的例子相当于你使用new。很酷的一点是,您可以在 struct 的括号内指定任何属性的值。
何时使用什么是您需要根据具体情况做出的决定。在 Go 中,我想要其中一个有几个原因;也许只有指针*myType 实现了一些接口,而myType 没有,实例myType 可能包含大约1 GB 的数据,并且您希望确保将指针而不是值传递给其他方法等。选择使用哪个取决于用例。虽然我会说,指针很少会更糟,因为我几乎总是使用它们。
【讨论】:
当你需要一个指针对象时,使用 new 或复合字面量,否则使用 var。
尽可能使用 var,因为它更有可能在堆栈中分配,并且一旦作用域结束,内存就会被释放。我最有可能在堆中分配新内存并且需要进行垃圾收集。
【讨论】:
var x T 并在最后调用 return &x。 new(T) 也不一定需要在堆上分配——这取决于编译器的逃逸分析要做什么。见:golang.org/doc/faq#stack_or_heap