Is there an idiomatic way to log result of a function returning multiple values? This won't compile:
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 summary (special thanks to @rvignacio):
This is a peculiarity in Go syntax:
func eat(args ...interface{}) {}
func eatWithSpice(spice string, args ...interface{}) {}
func main() {
eat(returnPair()) // this works
eatWithSpice("pepper", returnPair()) // this does not
}
As a special case, if the return values of a function or method g are equal in number and individually assignable to the parameters of another function or method f, then the call f(g(parameters_of_g)) will invoke f after binding the return values of g to the parameters of f in order. The call of f must contain no parameters other than the call of g, and g must have at least one return value. If f has a final ... parameter, it is assigned the return values of g that remain after assignment of regular parameters. (http://golang.org/ref/spec#Calls)
You can assign those returning values first:
a, b := returnPair()
log.Printf("Returned %d %d", a, b
You can see an example in "Multiple return values from Go functions".
Using a multiple returning value directly in Println
works though (since it accepts variadic parameters):
In your case: play.golang.org
package main
import "log"
func returnPair() (a int, b int) {
return 42, 24
}
func main() {
log.Println(returnPair())
}
Output:
2009/11/10 23:00:00 42 24