Open8
すぐ忘れるGolang基礎
interfaceがよくわからない
・インターフェースは振る舞いを定義しているだけ
package main
import "fmt"
// Greeter インターフェースは、あらゆる型が "greet" メソッドを実装する必要があることを示す
type Greeter interface {
Greet() string
}
// English は Greeter インターフェースを実装する
type English struct{}
func (e English) Greet() string {
return "Hello!"
}
// Japanese は Greeter インターフェースを実装する
type Japanese struct{}
func (j Japanese) Greet() string {
return "こんにちは!"
}
func greet(g Greeter) {
fmt.Println(g.Greet())
}
func main() {
english := English{}
japanese := Japanese{}
greet(english) // "Hello!" を出力
greet(japanese) // "こんにちは!" を出力
}
「これは挨拶をする」という振る舞いをinterfaceにしている
func (e English) Greet() string {
return "Hello!"
}
Go言語において、上記のようなメソッドは特定の型(この場合は English 型)に紐付けられた関数。メソッド定義の最初の部分である (e English) はレシーバと呼ばれ、これによってこの関数が English 型の値に対して操作を行うメソッドであることが示される。これにより、English 型の任意のインスタンスに対して .Greet() メソッドを呼び出すことができ、"Hello!" という文字列を返す。