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!")
}