gre*_*rep 7 logging multiple-value go
有没有一种惯用的方法来记录返回多个值的函数的结果?这不会编译:
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
Run Code Online (Sandbox Code Playgroud)
UPD 摘要(特别感谢@rvigacio):
这是 Go 语法的一个特点:
func eat(args ...interface{}) {}
func eatWithSpice(spice string, args ...interface{}) {}
func main() {
eat(returnPair()) // this works
eatWithSpice("pepper", returnPair()) // this does not
}
Run Code Online (Sandbox Code Playgroud)
作为一种特殊情况,如果函数或方法 g 的返回值数量相等并且可单独分配给另一个函数或方法 f 的参数,则调用 f(g(parameters_of_g)) 将在绑定返回值后调用 f g 的参数按顺序传递给 f 的参数。f 的调用除了 g 的调用之外不能包含任何参数,并且 g 必须至少有一个返回值。如果 f 有一个最终的 ... 参数,则为它分配常规参数分配后保留的 g 的返回值。(http://golang.org/ref/spec#Calls)
您可以先分配这些返回值:
a, b := returnPair()
log.Printf("Returned %d %d", a, b
Run Code Online (Sandbox Code Playgroud)
您可以在“ Go 函数的多个返回值”中查看示例。
不过,直接在工作中使用多个返回值Println(因为它接受可变参数):
在你的情况下:play.golang.org
package main
import "log"
func returnPair() (a int, b int) {
return 42, 24
}
func main() {
log.Println(returnPair())
}
Run Code Online (Sandbox Code Playgroud)
输出:
2009/11/10 23:00:00 42 24
Run Code Online (Sandbox Code Playgroud)