Menu
Coddy logo textTech

Go におけるオブジェクト指向入門

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

Goにはクラスはありませんが、構造体メソッドを通じてオブジェクト指向プログラミングを実現します。構造体は関連するデータをグループ化し、メソッドはその構造体に紐付けられた振る舞いを定義します。

データを保持するための構造体を定義します

type Dog struct {
    Name string
    Age  int
}

構造体にメソッドを追加します

func (d Dog) Bark() string {
    return d.Name + " says Woof!"
}

インスタンスを作成して使用する

package main

import "fmt"

type Dog struct {
    Name string
    Age  int
}

func (d Dog) Bark() string {
    return d.Name + " says Woof!"
}

func main() {
    myDog := Dog{Name: "Buddy", Age: 3}
    fmt.Println(myDog.Bark()) // 出力: Buddy says Woof!
    fmt.Println(myDog.Age)    // 出力: 3
}

Goでは、メソッド名の前にある(d Dog)という部分は、レシーバと呼ばれます。これはメソッドをDog構造体に結びつけるもので、他の言語においてメソッドがクラスに属する仕組みと似ています。

challenge icon

チャレンジ

簡単

GoのOOPへのアプローチを練習するために、メソッドを持つ Cat 構造体を作成してください:

  • Name (string) と Age (int) フィールドを持つ Cat 構造体を定義します
  • 猫の名前の後に " says Meow!" が続く文字列を返す Speak メソッドを追加します

チートシート

Goは、構造体 (structs)メソッド (methods)を通じてオブジェクト指向プログラミングを実現します。構造体は関連するデータをグループ化し、メソッドはその構造体に紐付けられた振る舞いを定義します。

データを保持するための構造体を定義します:

type Dog struct {
    Name string
    Age  int
}

レシーバ (receiver)を使用して、構造体にメソッドを紐付けます:

func (d Dog) Bark() string {
    return d.Name + " says Woof!"
}

メソッド名の前にある (d Dog) の部分はレシーバであり、メソッドを構造体に接続します。

インスタンスを作成して使用します:

myDog := Dog{Name: "Buddy", Age: 3}
fmt.Println(myDog.Bark()) // 出力: Buddy says Woof!
fmt.Println(myDog.Age)    // 出力: 3

自分で試してみよう

package main

import "fmt"

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

    cat := Cat{Name: name, Age: age}

    fmt.Printf("Name: %s\n", cat.Name)
    fmt.Printf("Age: %d\n", cat.Age)
    fmt.Println(cat.Speak())
}
quiz icon腕試し

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

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