すでにさらっと書いたけど、Go の関数は複数の値を返すことができる。いわゆる「多値」ってやつ。で、それを受け取るほうも普通に多重代入ができる。例を示すほうが早いだろう。
package main import "fmt" func divMod(x, y int) (int, int) { return x / y, x % y } func main() { p, q := divMod(10, 3) fmt.Println(p) fmt.Println(q) }
^o^ > go run multivalue.go 3 1
見てわかるように、多値を返すには関数の返り値の型をカッコでくくって並べて書き、return
に同じ数の値(もちろん型があってなきゃいけない)を渡してやるだけだ。Scheme の多値よりも扱いが簡単だね。
さて、多重代入ができるってことはこんなこともできる。
package main import "fmt" func main() { a, b := 10, 20 fmt.Println(a, b) b, a = a, b fmt.Println(a, b) }
^o^ > go run swap.go 10 20 20 10