Golang ネストされた構造体フィールドの昇格について
フィールドの昇格
Goの構造体フィールドは昇格という概念を持っています。
例えばネストされた子構造体のフィールドが昇格し、構造体の外からダイレクトにアクセスすることが可能です。
文字だとちょっとわかりずらいので以下に例を示します。
サンプルコード
package main
import "fmt"
// このようなネスト関係の構造体があるとします
type details struct {
// details structure
name string
age int
}
type team struct {
name string
year int
details
}
func main() {
// 構造体を宣言
values := team{
name: "Reds",
year: 2020,
details: details{
name: "Salah",
age: 27,
},
}
// 昇格により直接アクセスできる
fmt.Println("Age: ", values.age) // Age: 27
// 通常の子構造体へのアクセス
fmt.Println("Name: ", values.details.name) // Name: Salah
// 通常のフィールドアクセス
fmt.Println("Year: ", values.year) // Year: 2020
fmt.Println("Team name: ", values.name) // Team name: Reds
}
play.golang
このように子構造体のフィールドが昇格しネスト関係を明示しなくてもアクセスできるようになります。
Use Case
どの構造体にアクセスしているか正確に認識しなければならない時は、
明示して使うことの方が多いのですが、アクセスしているネストした
構造体を意識しなくても良い、意識させないケースでは使えます。
参照 Promoted Fields in Golang Structure
https://www.geeksforgeeks.org/promoted-fields-in-golang-structure/