1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Go言語(Golang) interfaceとstruct

Posted at

インターフェース (interface)

機能

  • インターフェースはメソッドの集合を定義する型です。
  • インターフェースを実装する型は、そのインターフェースが定義するすべてのメソッドを持っている必要があります。
  • インターフェースは、異なる型のオブジェクトが共通のメソッドを持つことを保証し、ポリモーフィズムを実現します。

使い方

  1. 定義:

    type Human interface {
        Say() string
    }
    
    • HumanインターフェースはSayというメソッドを定義しています。このメソッドは引数を取らず、文字列を返します。
  2. 実装:

    • インターフェースを実装するには、そのインターフェースが定義するすべてのメソッドを持つ構造体または型を定義します。
    type Person struct {
        Name string
    }
    
    func (p *Person) Say() string {
        p.Name = "Mr." + p.Name
        return p.Name
    }
    
    • Person構造体はSayメソッドを持っているため、Humanインターフェースを実装しています。
  3. 使用:

    • インターフェース型の変数に実装型のインスタンスを代入できます。
    var mike Human = &Person{"Mike"}
    fmt.Println(mike.Say()) // 出力: Mr.Mike
    

構造体 (struct)

機能

  • 構造体はフィールド(データ)をまとめて管理するためのカスタムデータ型です。
  • 構造体はメソッドを持つことができます。これにより、データとその操作をまとめて表現できます。

使い方

  1. 定義:

    type Person struct {
        Name string
    }
    
    • Person構造体はNameという文字列フィールドを持ちます。
  2. インスタンス化:

    p := Person{"Mike"}
    fmt.Println(p.Name) // 出力: Mike
    
  3. メソッドの定義:

    • メソッドは構造体に関連付けられた関数です。
    func (p *Person) Say() string {
        p.Name = "Mr." + p.Name
        return p.Name
    }
    
    • SayメソッドはPerson構造体のポインタレシーバを持ち、Nameフィールドを変更して新しい名前を返します。

インターフェースと構造体の連携

  • 構造体はインターフェースを実装することで、異なる構造体が共通のインターフェースを持つことができます。
  • これにより、異なる型のオブジェクトを同一の方法で扱うことができます。
func DriveCar(human Human) {
    if human.Say() == "Mr.Mike" {
        fmt.Println("Run")
    } else {
        fmt.Println("Get out")
    }
}

func main() {
    var mike Human = &Person{"Mike"}
    var x Human = &Person{"x"}
    DriveCar(mike) // 出力: Run
    DriveCar(x)    // 出力: Get out
}
  • このように、DriveCar関数はHumanインターフェースを引数に取り、どの具体的な型のインスタンスであってもインターフェースを実装していれば使用できます。
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?