将多个返回值传递给 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中文网其他相关文章!