こんにちは。Tomoyuki(@tomoyuki65)です。
以前の記事で構造体とメソッドの基礎について解説しましたが、さらにインターフェースを使うことで型の種類(構造体の種類)を気にせずに共通の機能(メソッド)を実行させることが可能です。
この記事では、Go言語のインターフェースについて解説します。
【関連記事】
Go言語(Golang)はクラスが無いけど構造体とメソッドがある
こんにちは。Tomoyuki(@tomoyuki65)です。Go言語(Golang)には他のプログラミング言語にあるクラスの概念はありませんが、その代わりに構造体というものがあります。この記事では、そんな構造体について解説します。Go言語(...
Go言語(Golang)のインターフェースで共通機能を実装する!
例えば以下のように構造体の種類にかかわらず共通の機能をインターフェースで定義(type AnimalBehavior interfaceの部分)し、それを実行させる関数を定義(func Intimidation(animal AnimalBehavior) {}の部分)すると、構造体の種類は違っても同じ機能を実行させることが可能です。
package main
import (
"fmt"
)
// 動物の行動をまとめたインターフェース
type AnimalBehavior interface {
Cry() // 鳴く
Growl() // 唸る
}
// 犬の構造体
type Dog struct {
Name string
}
// 鳴く
func (d Dog) Cry() {
fmt.Println("ワン!")
}
// 唸る
func (d Dog) Growl() {
fmt.Println("ウ〜〜〜")
}
// 猫の構造体
type Cat struct {
Name string
}
// 鳴く
func (c Cat) Cry() {
fmt.Println("ニャー!")
}
// 唸る
func (c Cat) Growl() {
fmt.Println("シャーー!!")
}
// 威嚇
func Intimidation(animal AnimalBehavior) {
animal.Growl()
}
func main() {
// 動物を定義
dog := Dog{Name: "ポチ"}
cat := Cat{Name: "たま"}
// 犬が鳴く
dog.Cry()
// 猫が鳴く
cat.Cry()
// 威嚇する
Intimidation(dog)
Intimidation(cat)
}
実行結果
ワン!
ニャー!
ウ〜〜〜
シャーー!!
最後に
今回はGo言語のインターフェースついて解説しました。
構造体の種類に関わらず共通の機能を実行させたい場合は、このインターフェースを使うことになるので、使い方について覚えておきましょう!
コメント