Logging 在Go中记录多个返回值

Logging 在Go中记录多个返回值,logging,go,multiple-value,Logging,Go,Multiple Value,是否有一种惯用的方法来记录函数返回多个值的结果?这不会编译: 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语法的一

是否有一种惯用的方法来记录函数返回多个值的结果?这不会编译:

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))将在按顺序将g的返回值绑定到f的参数后调用f。f的调用必须不包含除g的调用以外的任何参数,并且g必须至少有一个返回值。如果f有一个最终的。。。参数,则为其分配在分配常规参数后保留的g的返回值。()

您可以首先分配这些返回值:

a, b := returnPair()
log.Printf("Returned %d %d", a, b
您可以在“”中看到一个示例

但是,直接在
Println
中使用多个返回值仍然有效(因为它接受):

就你而言:

输出:

2009/11/10 23:00:00 42 24

我推荐VonC的方法,它更简洁,但是如果你真的想,你可以从
Must()
这类函数中得到启发,然后做如下操作:

编辑:

或更通用:


这正是我想要的avoid@grep我添加了另一种方法:直接使用println这看起来已经足够好了:
fmt.Printf(“returned%v”,fmt.Sprint(returnPair())
Lol,实际上更简单:p。不知道为什么我在第二个示例中调用了displayPair^,
eatWithSpice(“pepper”,returnPair())
不是不一致,应该是
eatWithSpice(“pepper”,returnPair()…)
@rvignacio不起作用:抱歉,我错过了您返回的多个值,:“作为一种特殊情况,如果一个函数或方法g的返回参数的数量相等,并且可以单独分配给另一个函数或方法f的参数,那么调用f(g(parameters_of_g))将在按顺序将g的返回值绑定到f的参数后调用f。不允许函数调用的其他特殊情况。”
2009/11/10 23:00:00 42 24
package main

import "fmt"

func returnPair() (int, int) {
    return 42, 24
}

func displayPair(a, b interface{}) string {
    return fmt.Sprint(a, b)
}

func main() {
    fmt.Printf("pair: %v\n", displayPair(returnPair()))
}
package main

import "fmt"

func returnPair() (int, int) {
    return 42, 24
}

func returnTriple() (int, int, int) {
    return 42, 24, 10
}

func displayPair(elem ...interface{}) string {
    return fmt.Sprint(elem...)
}

func main() {
    fmt.Printf("pair: %v, triple %v\n", displayPair(returnPair()), displayPair(returnTriple()))
}