首页 >后端开发 >Golang >Go 的 `fmt.Println` 可以直接处理函数的多个返回值吗?

Go 的 `fmt.Println` 可以直接处理函数的多个返回值吗?

Susan Sarandon
Susan Sarandon原创
2024-12-15 07:57:14285浏览

Can Go's `fmt.Println` Handle Multiple Return Values from a Function Directly?

将多个返回值传递给 Go 中的可变参数函数

问题:

函数可以吗返回多个整数值直接传入 fmt.Println() 进行格式化字符串输出,类似Python?

func temp() (int, int) { return 1, 1 }
fmt.Println("first= %d and second = %d", temp()) // Not supported

答案:

不,Go 默认情况下不直接支持。根据语言规范,“Calls”期望函数调用作为 ...interface{} 等可变参数的唯一参数,并且函数必须至少有一个返回值。

fmt.Printf(),但是,允许在可变参数旁边使用格式字符串,使其更适合此任务。但是,由于 temp() 返回一个元组,因此不能直接作为 ...interface{} 参数传递。

解决方案:

要传递多个返回值到可变参数函数中,可以使用实用程序包装函数将元组转换为 []interface{} 切片,然后将其作为可变参数传递。下面是一个示例实现:

func wrap(vs ...interface{}) []interface{} {
    return vs
}

使用此包装函数,temp() 函数现在可以传递到 fmt.Printf():

func main() {
    fmt.Printf("first= %v and second = %v", wrap(temp()...)...)
}

这将正确打印temp() 的值。

以上是Go 的 `fmt.Println` 可以直接处理函数的多个返回值吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn