Menu
Coddy logo textTech

クラスとしての構造体

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

構造体は、関連するフィールドをまとめます。フィールドにはドット演算子を使ってアクセスします。また、構造体を他の構造体の中にネストさせることで、複雑なデータモデルを構築できます。

challenge icon

チャレンジ

中級

以下のフィールドを持つ Profile 構造体を定義してください:

  • Name — string
  • Email — string
  • Age — int
  • Role — 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)
}
quiz icon腕試し

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

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