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