0
0

More than 1 year has passed since last update.

Goで使用しない戻り値、引数は無視しよう

Last updated at Posted at 2021-12-14

戻り値を無視する

この方法は結構使いますね。
関数から受け取った戻り値を使用せず放置すると、コンパイルエラーになってしまいます。

func main() {
    s, ok := plus(1, 2)
    println(s)
}

ビルドしてみると

./main.go:4:5: ok declared but not used

このような時に、使用しない戻り値を無視すると、問題なくビルドが通るようになります。

func main() {
    s, _ := plus(1, 2)
    println(s) // => 3
}

パラメータを無視する

戻り値を「_」を使って無視するのと同様に、関数の引数も「_」を使って無視することができます。

func doSome(_ int, _ int) int {
    return 100
}
doSome(1, 2) // => 100

では、一見無駄なように見えるこの機能は、どのようなケースで使われるのでしょうか。

実は、Goには「インターフェース」という機能があり、特定のインターフェースに属する型は、そのインターフェースに定義されているすべての関数群(メソッド)を実装しないといけません。
しかし、定義上では引数を受け取ったものの、実装上は一部の変数が不要な場合があります。
不要な引数を受け取ったからといって、コンパイルエラーになるとか、実害が発生わけではありません。
ここでは、あえて不要な引数に変数を割り当てないことで、実装上必要としないことを明示できる効果があります。

// インターフェース型I
type I interface {
    // 引数が二つ必要な定義
    plus(int, int) int
}

// 型Tの定義
type T struct {

}

func (t *T) plus(a int, _ int) int {
    // 実装では引数を一つしか使用しないので、2番めは無視
    return a
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0