構造体に埋め込みがある場合のフィールド名


[tag:]

golangで構造体を初期化する際に、 フィールド名を付けた方式で書きたいのだが、 埋め込んだフィールドの取り扱いが ざっと調べても見つからなかった。

tl; dr 型名を使う。

type Animal struct {
    Name string
}
type Dog struct {
    *Animal
    Age int
}

という構成で、

d := &Dog{
    new(Animal),
    Age: 10,
}

と書くと「mixture of field:value and value initializers」 というコンパイルエラーになる。
埋め込みフィールドのフィールド名がわからないのだが、 単に型名を書くので良いらしい。

d := &Dog{
    Animal: new(Animal),
    Age: 10,
}