41

これどうやってするの:

type A struct {
    MemberA string
}

type B struct {
    A A
    MemberB string
}

...

b := B {
    MemberA: "test1",
    MemberB: "test2",
}
fmt.Printf("%+v\n", b)

私を与えるコンパイル:「構造体リテラルの不明なBフィールド 'MemberA'」

このようなリテラル構造体メンバー値を提供するときに、MemberA を (「親」構造体から) 初期化するにはどうすればよいですか?

4

2 に答える 2

44

初期化中、匿名構造体はその型名でのみ認識されます(あなたの場合A)。構造体に関連付けられたメンバーと関数は、インスタンスが存在した後にのみ外部にエクスポートされます。

A初期化するには、有効なインスタンスを指定する必要がありますMemberA

b := B {
    A: A{MemberA: "test1"},
    MemberB: "test2",
}

コンパイラ エラー

構造体リテラルの不明な B フィールド 'MemberA'

はまさにそれを言います:MemberAそれはまだ入っていて、入っていないので、AありませんB。実際、 Bは を持つことはなくMemberA、常に に残りAます。MemberA のインスタンスにアクセスできるのBは、構文糖衣だけです。

于 2013-10-11T19:26:19.323 に答える