本当にただのメモ

なるべく Qiita に投稿しよう

構造体の埋め込みメモ

こういう埋め込みをする場合。

type Foo struct {
    Name string
}

type Bar struct {
    Foo
    Gender string
}

初期化

これはエラー。

bar := Bar{ Name: "John", Gender: "Female" }

こうしないといけない。

bar := Bar{ Foo{ Name: "John" }, Gender: "Female" }

プロパティの参照

下記はどちらも動く。

fmt.Println( bar.Name ) //=> John
fmt.Println( bar.Foo.Name ) //=> John

JSON

JSON 化すると Foo フィールドは無いことにされる。(予想通りの挙動)

bar := Bar{Foo: Foo{Name: "Bob"}, Gender: "Male"}
b, _ := json.MarshalIndent(&bar, "", "  ")
fmt.Println(string(b))
{
  "Name": "Bob",
  "Gender": "Male"
}

Struct を下記のようにすると Foo フィールドが付く。

type Bar struct {
    Foo    `json:"Foo"`
    Gender string
}
{
  "Foo": {
    "Name": "Bob"
  },
  "Gender": "Male"
}