構造体の初期化
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) // Dianavar を使用して、その後にフィールドに値を代入する方法
var p6 Person
p6.Name = "Eve"
p6.Age = 22名前付きフィールドによる初期化は、最も一般的で読みやすい手法です。構造体へのポインタが必要な場合は、& を使用してください。
チャレンジ
中級異なる初期化方法を使用して、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) // Dianavarを使用してからフィールドを代入する方法:
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)
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
オブジェクト指向プログラミングのすべてのレッスン
1Go オブジェクト指向の基礎
外部ファイルGo ワークスペースとモジュールパッケージとインポート公開された名前と非公開の名前Go におけるオブジェクト指向入門クラスとしての構造体構造体へのメソッド定義ポインタレシーバと値レシーバ構造体の初期化コンストラクタ関数まとめ:簡易計算機8エラー処理とOOP
error インターフェースカスタムエラー型エラーラッピング (fmt.Errorf)センチネルエラーerrors.Is() と errors.As()Panic、Defer、Recover復習 - ファイルパーサー