当我有一个包含其他结构的结构时,我应该总是使用指针吗?

Kir*_*ril 1 go

我们有:

type A struct {
  Name  string
  Value string
}

type B struct {
  //
  First  *A
  Second A
}
Run Code Online (Sandbox Code Playgroud)

首先:什么它更有效B,使用*AA

第二:实例化时B我会使用b := &B{ ... },因而有一个指针B.所有具有B接收器func (*B) ...用作签名的功能,因此仅在指针上操作.既然我总是有一个指针B,那真的很重要B吗?如果我总是使用指针,无论哪个字段B都有,我总是传递指针,B并且Second A在传递时永远不会复制值*B.或者我错过了什么?

Seb*_*ian 5

没有一个正确的答案.它总是取决于您的用例.

一些指导:

  1. 在效率方面考虑语义原因
  2. A"大" 时使用指针
  3. B不应该允许编辑时避免使用指针A

你的第二个陈述是正确的.但是当你有很多B使用指针的实例时,效率要高得多(如果结构A明显大于指针的大小).

如果您有疑问,请根据用例进行测量,然后确定最佳解决方案.