Menu
Coddy logo textTech

構造体の初期化

CoddyのGOジャーニー「オブジェクト指向プログラミング」セクションの一部 — レッスン 9/107。

Goは構造体を初期化するためのいくつかの方法を提供しており、それぞれが異なる状況で役立ちます。

名前付きフィールドの初期化

type Person struct {
    Name string
    Age  int
    City string
}

p1 := Person{
    Name: "Alice",
    Age:  25,
    City: "New York",
}

位置による初期化(順序はフィールドの宣言と一致する必要があります)

p2 := Person{"Bob", 30, "London"}

ゼロ値による初期化(すべてのフィールドにデフォルト値が設定されます)

p3 := Person{}
// Name: "", Age: 0, City: ""

部分的な初期化 (設定されていないフィールドはゼロ値になります)

p4 := Person{Name: "Charlie"}
// Name: "Charlie", Age: 0, City: ""

& を使用した構造体へのポインタ

p5 := &Person{
    Name: "Diana",
    Age:  28,
    City: "Paris",
}
fmt.Println(p5.Name) // Diana

var を使用して、その後にフィールドに値を代入する方法

var p6 Person
p6.Name = "Eve"
p6.Age = 22

名前付きフィールドによる初期化は、最も一般的で読みやすい手法です。構造体へのポインタが必要な場合は、& を使用してください。

challenge icon

チャレンジ

中級

異なる初期化方法を使用して、3つの Player オブジェクトを作成してください:

  • player1: 入力値を使用した名前付きフィールドによる初期化
  • player2: Name: "Guest"、Class: "Novice"、HitPoints: 50 を使用した名前付きフィールドによる初期化
  • player3: var 宣言を使用し、その後各フィールドを個別に代入

チートシート

Goは、構造体を初期化するためのいくつかの方法を提供しています:

名前付きフィールドによる初期化(最も一般的で読みやすい方法):

p1 := Person{
    Name: "Alice",
    Age:  25,
    City: "New York",
}

位置による初期化(順序はフィールドの宣言と一致する必要があります):

p2 := Person{"Bob", 30, "London"}

ゼロ値による初期化(すべてのフィールドにデフォルト値が設定されます):

p3 := Person{}
// Name: "", Age: 0, City: ""

部分的な初期化(設定されていないフィールドにはゼロ値が設定されます):

p4 := Person{Name: "Charlie"}
// Name: "Charlie", Age: 0, City: ""

&を使用した構造体へのポインタ

p5 := &Person{
    Name: "Diana",
    Age:  28,
}
fmt.Println(p5.Name) // Diana

varを使用してからフィールドを代入する方法:

var p6 Person
p6.Name = "Eve"
p6.Age = 22

自分で試してみよう

package main

import "fmt"

func main() {
    var name, class string
    var hp int
    fmt.Scan(&name, &class, &hp)

    // TODO: 入力値を使用して、名前付きフィールド初期化で player1 を作成してください

    // TODO: 名前付きフィールド初期化を使用して player2 を作成してください:
    // Name: "Guest", Class: "Novice", HitPoints: 50

    // TODO: var 宣言を使用して player3 を作成し、その後フィールドを割り当ててください:
    // Name: "Hero", Class: "Knight", HitPoints: 200

    fmt.Printf("Player 1: %s (%s) - HP: %d\n", player1.Name, player1.Class, player1.HitPoints)
    fmt.Printf("Player 2: %s (%s) - HP: %d\n", player2.Name, player2.Class, player2.HitPoints)
    fmt.Printf("Player 3: %s (%s) - HP: %d\n", player3.Name, player3.Class, player3.HitPoints)
}
quiz icon腕試し

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

オブジェクト指向プログラミングのすべてのレッスン