Golang:在函数中使用一个值来返回多个参数

时间:2014-07-23 13:37:40

标签: go

假设在Go中我们有一个返回两个参数的函数

func squareAndCube(int side) (square int, cube int) {
    square = side * side
    cube = square * side
    return
}

然后,您希望在条件中使用此函数的第一个(第二个)值:

square, _ := squareAndCube(n)
if square > m {
    ...
}

但是,如果我们不需要在任何其他地方使用值square,我们可以在一行中前两行吗? E.g。

 if squareAndCube(n).First() > m {
     ...
 }

2 个答案:

答案 0 :(得分:27)

您无法选择多个返回值中的一个,但您可以编写类似

的内容
if square, _ := squareAndCube(n); square > m {
    // ...
}

square变量仅在if范围内有效。这些“简单陈述”可以在if statementsswitch statements和其他构造中使用,例如for循环。

另请参阅effective go article on if statements

答案 1 :(得分:4)

Vladimir Vivien发现this博客文章,该问题有一个很好的解决方法。解决方案是创建一个函数“......利用编译器的自动转换将”x ... interface {}“形式的vararg参数转换为标准[]接口{}。”

func mu(a ...interface{}) []interface{} {
    return a
}

现在你可以用mu中的多个返回值包装任何函数并索引返回的切片,然后是类型断言

package main

import(
    "fmt"
)

func mu(a ...interface{}) []interface{} {
    return a
}

func myFunc(a,b string) (string, string){
    return b, a
}

func main(){
    fmt.Println(mu(myFunc("Hello", "World"))[1].(string))
}

// output: Hello