埋め込まれた構造体を初期化する場合は、通常の構造体と同様に、構造体に埋め込まれた型をフィールド名として初期化しますが、詳細な実装手順は以下のコードを参照してください。
車両構造の組み立てと初期化:
package main
import "fmt"
// 車のホイール
type Wheel struct {
Size int // サイズ
}
// 車のエンジン
type Engine struct {
Power int // パワー
Type string // タイプ
}
// 車
type Car struct {
Wheel Wheel // ホイール
Engine Engine // エンジン
}
func main() {
c := Car{
// ホイールの初期化
Wheel: Wheel{
Size: 18,
},
// エンジンの初期化
Engine: Engine{
Type: "1.4T",
Power: 143,
},
}
fmt.Printf("%+v\n", c)
}
コードの説明は次のとおりです。
- 6 行目はホイール構造を定義します。
- 11 行目はエンジン構造を定義します。
- 17 行目は、ホイールとエンジンの構造によって埋め込まれた自動車の構造を定義します。
- 27行目では、CarのWheelフィールドがWheel構造体で初期化されています。
- 32 行目で、Car の Engine フィールドが Engine 構造体で初期化されます。
コンテンツ
表示
埋め込まれた匿名構造体を初期化する
車両とエンジンを説明した前の例では、コードを記述する利便性を考慮して、埋め込み構造で構造を直接定義しています。つまり、構造体の定義は外部から参照されません。埋め込み構造体を初期化する場合は、再度構造体を宣言してデータを代入する必要があります。詳細については、以下のコードを参照してください。
package main
import "fmt"
// 車のホイール
type Wheel struct {
Size int // サイズ
}
// 車両
type Car struct {
Wheel // Wheelを埋め込んでいる
// エンジン
Engine struct {
Power int // 馬力
Type string // 種類
}
}
func main() {
c := Car{
// ホイールを初期化
Wheel: Wheel{
Size: 18,
},
// エンジンを初期化
Engine: struct {
Power int
Type string
}{
Type: "1.4T",
Power: 143,
},
}
fmt.Printf("%+v\n", c)
}
コードの説明は次のとおりです。
- 14 行目の元の Engine 構造は Car 構造で直接定義されています。この埋め込み記述方法は、元の構造体型を struct{…} に変換するものです。
- 30行目ではCarのEngineフィールドを初期化する必要がありますが、Engineフィールドの型は別途定義されていないため、初期化時にstruct{…}を記述して型を宣言する必要があります。
- 行 3 では、この匿名構造体のデータの入力を開始し、「key:value」の形式で入力します。
「 Go 言語は埋め込み構造を初期化します」についてわかりやすく解説!絶対に観るべきベスト2動画
【たった1時間で学べる】Go言語のプログラミング初心者向けの超入門講座【文字書き起こし、ソースコードも完全無料!】
GO言語でAPI開発「 gRPC 」入門