Go言語のメソッドを扱いましたが、それに似た構文としてインターフェイスを見ていきます。
インターフェイス(interface)
インターフェイスは、構造体のように型が格納する値を定義するのではなく、何が実行されるかのメソッドの型を格納します。
インターフェイスに格納されたメソッドには具体的な処理の記述はなく、別の構造体のメソッドとして具体的に実装します。
インターフェイスは次のような形で記述します。
type インターフェイス名 interface {
メソッド()
}
func (レシーバ 型) メソッド() {
処理コード
}
typeキーワードで、interface型を定義し、その中にメソッドのみを記述します。
そのメソッドをレシーバを使って具体的な処理コードを定義します。
こうすることで、メソッドとインターフェイスを関連づけて使うことができます。
といってもこう行った文章じゃわかりにくいので、具体的なコードで見て行きましょう。
package main
import "fmt"
type scenario interface {
dialogue()
}
type character struct {
name string
roleName string
}
func (c character) dialogue() {
fmt.Println(c.name)
fmt.Println(c.roleName, "「それは好きの搾取です」")
}
func main() {
var nigehaji scenario = character{
name: "新垣結衣",
roleName: "みくり",
}
nigehaji.dialogue()
}
sinario型というインターフェイスを定義しています。メソッドにdialogue()を使います。このdialogue()自体の処理は、別で定義して関連づけます。
character型というstructを定義しています。これをレシーバとして、dialogue()の処理を記述しています。
main()関数の中でscenario型の変数nigehajiを宣言します。これにレシーバのstructのcharacterを当てはめています。これで、メソッドがインターフェイスで関連づけられました。
これによって、scenario型の変数nigehajiからdialogue()メソッドを実行しています。
実行すると次のように表示されます。
新垣結衣
みくり 「それは好きの搾取です」
インターフェイス型の変数からメソッドにアクセスして実行できているのがわかります。
最後に
Go言語のインターフェイス(interface)について簡単に見てきました。
インターフェイスは、構造体のように型が格納する値を定義するのではなく、何が実行されるかのメソッドの型を示します。
インターフェイス型の変数を実行するには、別にレシーバで受けたメソッドに処理を記述して関連づけます。