これどうやってするの:
type A struct {
MemberA string
}
type B struct {
A
MemberB string
}
...
b := B {
MemberA: "test1",
MemberB: "test2",
}
fmt.Printf("%+v\n", b)
それをコンパイルすると、「構造体リテラルの不明なBフィールド 'MemberA'」が表示されます。
このようなリテラル構造体メンバー値を提供するときに、(「親」構造体から)MemberAを初期化するにはどうすればよいですか?
初期化中、匿名構造体はその型名(あなたの場合はA
)でしか知られていません。構造体に関連付けられたメンバーと関数は、インスタンスが存在した後でのみ外部にエクスポートされます。
A
を初期化するには、MemberA
の有効なインスタンスを指定する必要があります:
b := B {
A: A{MemberA: "test1"},
MemberB: "test2",
}
コンパイラエラー
構造体リテラルの不明なBフィールド 'MemberA'
それは正確に言っています:MemberA
はA
ではなくB
にまだあるのでありません。実際、B
にMemberA
が含まれることはなく、常にA
に残ります。 MemberA
のインスタンスでB
にアクセスできることは、単なる構文上の砂糖です。