複数の値を返す関数の結果を記録する慣用的な方法はありますか? これはコンパイルされません:
import "log"
func returnPair() (int,int) {
return 42, 24
}
func main() {
log.Printf("Returned %v", returnPair())
}
prog.go:7: multiple-value returnPair() in single-value context
UPD の概要 (@rvignacio に特に感謝):
これは Go 構文の特徴です。
func eat(args ...interface{}) {}
func eatWithSpice(spice string, args ...interface{}) {}
func main() {
eat(returnPair()) // this works
eatWithSpice("pepper", returnPair()) // this does not
}
特殊なケースとして、関数またはメソッド g の戻り値の数が等しく、別の関数またはメソッド f のパラメーターに個別に割り当て可能な場合、呼び出し f(g(parameters_of_g)) は戻り値をバインドした後に f を呼び出します。 g の f のパラメーターに順番に。f の呼び出しには、g の呼び出し以外のパラメーターを含めてはならず、g には少なくとも 1 つの戻り値が必要です。f に最後の ... パラメータがある場合、通常のパラメータの割り当て後に残る g の戻り値が割り当てられます。( http://golang.org/ref/spec#Calls )