すでにさらっと書いたけど、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