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

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

Susan Sarandon
发布: 2024-12-15 07:57:14
原创
287 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板