Go言語で引数名省略が可能な理由

Go言語で引数名が省略できる理由

Go言語では引数名の省略が可能です。
そのため、以下の意味不明なコードはコンパイル可能です

func Greet(string){}

なぜこの書き方ができるのか

この記法が存在する理由はGo言語のinterfaceを考えると理解できます。

以下のようなGreeterインターフェースを考えてみます

type Greeter interface {
    Greet(name string) string
}

このインターフェースを人間と犬で実装すると以下のようになります。

type Human struct{}

func (h *Human) Greet(name string) string {
    return "Hello, " + name
}

var _ Greeter = &Human{}

type Dog struct{}

func (d *Dog) Greet(name string) string {
    return "Woof"
}

var _ Greeter = &Dog{}

この時、犬は対象の名前を必要としないので、name引数は不要です。しかしinterfaceを実装する都合上引数自体は持っておく必要があります。
こういった場合に変数省略の記法を利用することで不要な引数を明示できます。

func (d *Dog) Greet(string) string {
    return "Woof"
}

コメント

タイトルとURLをコピーしました