我们有:
type A struct {
Name string
Value string
}
type B struct {
//
First *A
Second A
}
首先关注:B
使用*A
或A
提高效率是什么?
第二:在实例化B
时,我会使用b := &B{ ... }
,因此指向B
。具有B
作为接收者的所有函数使用func (*B) ...
作为签名,因此仅在指针上操作。现在我总是有一个指向B
的指针,B
组成的是什么真的很重要?如果我总是使用指针,无论B
有哪些字段,我总是会传递一个指向B
的指针,并且在传递Second A
时永远不会复制*B
的值。或者我错过了什么?
答案 0 :(得分:5)
没有一个正确的答案。它总是取决于你的用例。
一些指导:
A
为"大" B
编辑A
你的第二个陈述是正确的。但是当你有很多使用指针的B
实例时效率会更高(如果struct A
明显大于指针的大小)。
如果您有疑问,请根据用例进行衡量,然后确定最佳解决方案。
答案 1 :(得分:0)
只想添加到Sebastian的答案:如果您希望*A
使用nil
,请使用A
。当编组JSON或将结构与数据库结合使用时,这有时会带来好处。
指向nil
的非指针始终至少具有该类型的零值。因此,即使您没有任何有用的东西,它也会始终序列化为JSON。要仅在存在填充结构时将其包含在JSON序列化中,请将其设为指针,该指针可以是{{1}}。