埋め込み構造体
CoddyのGOジャーニー「基礎」セクションの一部。レッスン 99/109。
Goでは、ある構造体を別の構造体に埋め込むことで、コンポジション関係を作成できます。これがGoにおける継承のアプローチです。
一方をもう一方に埋め込んだ2つの構造体を定義します。
type Address struct {
city string
state string
}
type Person struct {
name string
age int
Address // 埋め込み構造体(フィールド名なし)
}
func main() {
person := Person{
name: "Alice",
age: 30,
Address: Address{city: "Portland", state: "Oregon"},
}
// フィールドに直接アクセスする
fmt.Println(person.city) // 埋め込みフィールドにアクセスする
}
出力から、埋め込み構造体のフィールドに直接アクセスできることがわかります:
Portlandチャレンジ
初心者この課題では、Goの埋め込み構造体(コンポジション)の使い方を練習します。
2つの構造体、AddressとPersonがあります。人が住所のフィールドに直接アクセスできるように、Person構造体にAddress構造体を埋め込む必要があります。
あなたの課題は、Address構造体を埋め込むようにPerson構造体の定義を完成させることです。main内のprint文は、すでに人から住所のフィールドに直接アクセスしています(person.Street、person.City、person.ZipCode)。Addressを埋め込めばコンパイルできます。
自分で試してみよう
package main
import "fmt"
// Address structには所在地の情報が含まれる
type Address struct {
Street string
City string
ZipCode string
}
// Person structにはAddress structを埋め込む必要がある
type Person struct {
Name string
Age int
// TODO: ここにAddress structを埋め込む(1行だけ)
}
func main() {
// 住所情報を含む新しいpersonを作成する
person := Person{
Name: "Alice",
Age: 30,
Address: Address{
Street: "123 Main St",
City: "Wonderland",
ZipCode: "12345",
},
}
// 住所を含むpersonの情報を出力する
fmt.Println("Name:", person.Name)
fmt.Println("Age:", person.Age)
// personインスタンスから住所のフィールドを直接出力する
fmt.Println("Street:", person.Street)
fmt.Println("City:", person.City)
fmt.Println("ZipCode:", person.ZipCode)
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
基礎のすべてのレッスン
自分で練習してみよう: Goオンラインコンパイラ