Open8

すぐ忘れるGolang基礎

SuuSuu

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) // "こんにちは!" を出力
}
SuuSuu

「これは挨拶をする」という振る舞いをinterfaceにしている

func (e English) Greet() string {
    return "Hello!"
}

Go言語において、上記のようなメソッドは特定の型(この場合は English 型)に紐付けられた関数。メソッド定義の最初の部分である (e English) はレシーバと呼ばれ、これによってこの関数が English 型の値に対して操作を行うメソッドであることが示される。これにより、English 型の任意のインスタンスに対して .Greet() メソッドを呼び出すことができ、"Hello!" という文字列を返す。