Menu
Coddy logo textTech

埋め込み構造体

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
challenge icon

チャレンジ

初心者

このチャレンジでは、Goにおける埋め込み構造体(コンポジション)の使用を練習します。

AddressPerson という2つの構造体があります。Person 構造体は Address 構造体を埋め込む必要があり、これにより Person インスタンスから直接住所のフィールドにアクセスできるようになります。

あなたのタスクは、Address 構造体を埋め込むように Person 構造体の定義を完成させ、その後、Person インスタンスから直接住所のフィールドにアクセスすることです。

チートシート

Goはコンポジションのために構造体の埋め込み(struct embedding)を使用します。フィールド名なしで構造体型を含めることで、ある構造体を別の構造体の中に埋め込みます。

type Address struct {
    city  string
    state string
}

type Person struct {
    name string
    age  int
    Address  // 埋め込み構造体(フィールド名なし)
}

埋め込まれた構造体のフィールドには直接アクセスできます:

person := Person{
    name: "Alice",
    age: 30,
    Address: Address{city: "Portland", state: "Oregon"},
}

fmt.Println(person.city)  // 埋め込まれたフィールドに直接アクセスする

自分で試してみよう

package main

import "fmt"

// Address 構造体は場所の情報を保持します
type Address struct {
	Street  string
	City    string
	ZipCode string
}

// Person 構造体は Address 構造体を埋め込む必要があります
type Person struct {
	Name string
	Age  int
	// TODO: ここに Address 構造体を埋め込んでください(1行のみ)
}

func main() {
	// 住所情報を持つ新しい人物を作成します
	person := Person{
		Name: "Alice",
		Age:  30,
		Address: Address{
			Street:  "123 Main St",
			City:    "Wonderland",
			ZipCode: "12345",
		},
	}

	// 住所を含む人物情報を出力します
	fmt.Println("Name:", person.Name)
	fmt.Println("Age:", person.Age)
	
	// TODO: person インスタンスから直接住所フィールドを出力してください
	// (person.Address.Street などを使用せずに)
	fmt.Println("Street:", person.Street)
	fmt.Println("City:", person.City)
	fmt.Println("ZipCode:", person.ZipCode)
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

基礎のすべてのレッスン