インターフェースの使い方
インターフェースは次のように定義します。
type [name] interface {
[method_name],
}
インターフェースのメリット
簡単に使い方を説明します、、、
main.go
package main
import (
"fmt"
)
type Named interface{
Name() string
}
//インターフェースを通してメソッドを呼び出す
func CallName(named Named) {
fmt.Println(named.Name())
}
type Dog struct{
say string
}
//インターフェースの実装
func (d *Dog) Name() string {
return d.say
}
type Cat struct{
say string
}
//インターフェースの実装
func (c *Cat) Name() string {
return c.say
}
func main() {
dog := Dog{
say: "Hello",
}
cat := Cat{
say: "World",
}
CallName(&dog)
CallName(&cat)
}
結果
Hello
World
- インターフェースNamedを定義し、その中にNameというメソッドを定義する。
- 構造体DogとCatを定義し、それぞれをレシーバに持つNameというメソッドを定義する。
- Nameメソッドを定義することでそのメソッドのレシーバである構造体はインターフェースを実装したことになる。
- インターフェースを実装したことでCall Nameをどちらのメソッドとしても呼び出すことができるようになる。
まとめ
インターフェースはメソッドのまとまりのようなもので、インターフェースの中に定義されているメソッドを全て使うことでそのメソッドのレシーバはインターフェースを実装したことになる。
これにより、インターフェースを通して各レシーバを持つメソッドを1つの関数から呼び出すことができるようになる。
間違っている箇所があればご指摘いただければ助かります。。。
-----参考サイト----
https://teratail.com/questions/60856