クラスとしての構造体
CoddyのGOジャーニー「オブジェクト指向プログラミング」セクションの一部 — レッスン 6/107。
Goにおける構造体は、他の言語におけるクラスと同じ目的を果たします。これらは、関連するデータを単一の型にまとめます。
複数のフィールド型を持つ構造体を定義します
type Car struct {
Brand string
Model string
Year int
Price float64
}フィールド名を使用してインスタンスを作成します
car := Car{
Brand: "Toyota",
Model: "Camry",
Year: 2023,
Price: 28000.50,
}フィールドへのアクセスと変更
fmt.Println(car.Brand) // Toyota
fmt.Println(car.Year) // 2023
car.Price = 27000.00 // フィールドを変更する
fmt.Println(car.Price) // 27000構造体は他の構造体を含むことができます
type Engine struct {
Horsepower int
FuelType string
}
type Car struct {
Brand string
Model string
Engine Engine
}
car := Car{
Brand: "Ford",
Model: "Mustang",
Engine: Engine{Horsepower: 450, FuelType: "Gasoline"},
}
fmt.Println(car.Engine.Horsepower) // 450構造体は、関連するフィールドをまとめます。フィールドにはドット演算子を使ってアクセスします。また、構造体を他の構造体の中にネストさせることで、複雑なデータモデルを構築できます。
チャレンジ
中級以下のフィールドを持つ Profile 構造体を定義してください:
Name— stringEmail— stringAge— intRole— string
チートシート
Goの構造体(Structs)は、関連するデータを1つの型にまとめます。これは他の言語におけるクラスに似ています。
複数のフィールド型を持つ構造体を定義します:
type Car struct {
Brand string
Model string
Year int
Price float64
}フィールド名を使用してインスタンスを作成します:
car := Car{
Brand: "Toyota",
Model: "Camry",
Year: 2023,
Price: 28000.50,
}ドット演算子を使用してフィールドにアクセスし、変更します:
fmt.Println(car.Brand) // Toyota
car.Price = 27000.00 // フィールドを変更する構造体は他の構造体を含めることができます(入れ子の構造体):
type Engine struct {
Horsepower int
FuelType string
}
type Car struct {
Brand string
Model string
Engine Engine
}
car := Car{
Brand: "Ford",
Model: "Mustang",
Engine: Engine{Horsepower: 450, FuelType: "Gasoline"},
}
fmt.Println(car.Engine.Horsepower) // 450自分で試してみよう
package main
import "fmt"
func main() {
var name, email, role string
var age int
fmt.Scan(&name, &email, &age, &role)
p := Profile{
Name: name,
Email: email,
Age: age,
Role: role,
}
fmt.Printf("Name: %s\n", p.Name)
fmt.Printf("Email: %s\n", p.Email)
fmt.Printf("Age: %d\n", p.Age)
fmt.Printf("Role: %s\n", p.Role)
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
オブジェクト指向プログラミングのすべてのレッスン
1Go オブジェクト指向の基礎
外部ファイルGo ワークスペースとモジュールパッケージとインポート公開された名前と非公開の名前Go におけるオブジェクト指向入門クラスとしての構造体構造体へのメソッド定義ポインタレシーバと値レシーバ構造体の初期化コンストラクタ関数まとめ:簡易計算機8エラー処理とOOP
error インターフェースカスタムエラー型エラーラッピング (fmt.Errorf)センチネルエラーerrors.Is() と errors.As()Panic、Defer、Recover復習 - ファイルパーサー