Goのinterface

ツイート このエントリーをはてなブックマークに追加
1つ上へ / ブログトップへ

Goでもinterfaceを定義できます。形式はtype 名前 interface{ }です。

type Enemy interface {
        Attack()
}

interfaceを実装する場合、他の言語のように明示的にimplementsを書く必要はありません。とりあえずシグネチャーの一致するメソッドを定義すればOKです。

type Moke struct {
        Name string
}

func (m *Moke) Attack() {
        fmt.Printf(m.Name + " Attacked!")
}

実際にEnemy型の変数に代入してみましょう。このとき、Attack()メソッドのレシーバーはポインタなので、代入時は&をつけてアドレスを渡すようにしないとコンパイルエラーになります。

func main() {
        var m Enemy
        m = &Moke{"Enemy"}
        m.Attack()
}

今回の全文はこちら。

package main

import (
        "fmt"
)

func main() {
        var m Enemy
        m = &Moke{"Enemy"}
        m.Attack()
}

type Enemy interface {
        Attack()
}

type Moke struct {
        Name string
}

func (m *Moke) Attack() {
        fmt.Printf(m.Name + " Attacked!")
}
1つ上へ / ブログトップへ