インターフェイス
【開発環境】
OS:Win11(64ビット)
go version go1.19.4 windows/amd64
VSCode1.72.2、及びコマンドプロンプト
【インターフェース】
インターフェースとは、インターフェースを介してインターフェースと一致する複数の異なるメソッドを同じ方法で呼び出せるようになる。
インターフェースは、メソッドだけを定義する
・メソッドだけのプログラム(インターフェースを使わない)
// dogcat.go
package main
import "fmt"
//Dog-犬の構造体
type Dog struct{}
//Cry - 犬が吠える
func (d *Dog) Cry() {
fmt.Println("わんわん")
}
//Cat - 猫の構造体
type Cat struct{}
//Cry - 猫が鳴く
func (c *Cat) Cry() {
fmt.Println("にゃ-ご")
}
func main() {
//犬と猫を作る
dog := new(Dog)
Cat := new(Cat)
//犬と猫が鳴く
dog.Cry()
Cat.Cry()
}
・実行
PS D:\GO言語\サンプルプログラム\Go-7\インターフェース> go run dogcat.go
わんわん
にゃ-ご
◆インターフェースを使うプログラム
インターフェースを使用すると、犬とネコを「動物」というカテゴリにまとめて、犬猫の区別無く鳴かせることができる
インターフェース型はメソッドの宣言だけを定義したもので、メソッドには実行するプログラムコードは記述しない!
type name interface {
.....
......
}
・サンプルコード
// animal.go
package main
import "fmt"
//Animal - 動物のインターフェース
type Animal interface {
Cry()
}
//Dog - 犬の構造体
type Dog struct{}
//Cry - 犬が吠える
func (d *Dog) Cry() {
fmt.Println("わんわん")
}
//Cat - 猫の構造体
type Cat struct{}
//Cat - 猫が鳴く
func (c *Cat) Cry() {
fmt.Println("にゃーご")
}
func main() {
//犬と猫を作る
dog := new(Dog)←犬の構造体のポインタ
cat := new(Cat)←猫の構造体のポインタ
//犬と猫が鳴く
dog.Cry()
cat.Cry()
//犬と猫のスライスを作る
animals := [...]Animal{dog, cat}
for _, a := range animals {
a.Cry()←インターフェースならではの表現
}
}
・実行
PS D:\GO言語\サンプルプログラム\Go-7\インターフェース> go run animal.go
わんわん
にゃーご
わんわん
にゃーご