因此,您在这里遇到了Go的特质。嵌入是一种方法,它可以“提升”一个结构的方法以使其似乎存在于另一个结构上。尽管
type NodeProperties应该直观地了解这些
Properties方法
Node,但该语法的作用是继承其方法
Node的内存布局,
Properties而不是其所有方法的内存布局。
它没有解释为什么做出这种设计选择,但是Go
Spec至少是特定的(如果干燥的话)。如果您完全按原样阅读它,没有任何解释,那么它是非常准确的:
接口类型的方法集是其接口。任何其他类型T的方法集都包含以接收者类型T声明的所有方法
GetString的接收器类型
Properties不是not
Node,认真地将规范解释为您是没有想象力的会计师。照这样说:
进一步的规则适用于包含匿名字段的结构,如有关结构类型的部分中所述。
…
如果xf是表示该字段或方法f的合法选择器,则将结构x中匿名字段的字段或方法f称为提升。
提升的字段的作用类似于结构的普通字段,只是它们不能用作结构的复合文字中的字段名称。
给定一个结构类型S和一个名为T的类型,在该方法的方法集中包括了以下改进的方法:
- 如果S包含匿名字段T,则S和 S的方法集都包括接收者T的提升方法。 S的方法集也包括接收者* T的提升方法。
- 如果S包含一个匿名字段 T,则S和 S的方法集都包括接收者T或* T的提升方法。
关于复合文字的这一行迫使您
Properties在每次
Node创建的内容中进行声明。
ps杰夫!



