如何在Go lang函数中返回多个值,可以使用variadic参数传递给其他函数

时间:2016-12-10 13:45:43

标签: go

我是新手去编程,

假设此代码,其中函数fmt.Printf()传递两个不同的值

package main

import "fmt"

func main() {
   var a int = 150
   var b int = 130
   var ret1, ret2 int
   ret1, ret2 = max(a, b)
   fmt.Printf( "Max val: %d Min val: %d\n", ret1, ret2 )
}

func max(num1, num2 int) (int,int) {
   if (num1 > num2) {
      return num1, num2
   } else {
      return num2, num1
   }
}

而不是传递ret1,fmt.Printf( "Max val: %d Min val: %d\n", ret1, ret2 )中的ret2有任何办法,我可以直接在max(a, b)中传递fmt.Printf()

fmt.Printf( "Max val: %d Min val: %d\n", max(a, b))

我试过了,它给出了错误

  

单值上下文中的多值max()

看起来,返回两个不同的值而不是一个元组,我的回归概念是错误的,或者我做错了。

是否有任何方法可以将多次返回的函数直接传递给函数需要可变数量的值

TIA

2 个答案:

答案 0 :(得分:3)

来自specification

  

作为一种特殊情况,如果函数或方法g的返回值在数量上相等并且可以单独分配给另一个函数或方法f的参数,那么调用f(g(parameters_of_g))将在绑定后调用f g的返回值依次为f的参数。 f的调用必须不包含除g的调用之外的参数,并且g必须至少具有一个返回值。如果f具有final ...参数,则为其分配在分配常规参数后保留的g的返回值。

您要进行的调用问题是Printf的其中一个参数不是max的返回值。这个电话有效:

fmt.Println(max(a, b))

https://play.golang.org/p/ZZayVkwZJi

答案 1 :(得分:1)

您可以使用带有可变参数的内联辅助函数执行类似操作。

package main

import "fmt"

func main() {
   var a int = 150
   var b int = 130
   func(i ...int){fmt.Printf( "Max val: %d Min val: %d\n", i[0], i[1] )}(max(a,b))
}

func max(num1, num2 int) (int,int) {
   if (num1 > num2) {
      return num1, num2
   } else {
      return num2, num1
   }
}

我希望它有所帮助。

请查看https://play.golang.org/p/tB-q8hjNdu以查看其实际效果。