假设在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 {
...
}
答案 0 :(得分:27)
您无法选择多个返回值中的一个,但您可以编写类似
的内容if square, _ := squareAndCube(n); square > m {
// ...
}
square
变量仅在if
范围内有效。这些“简单陈述”可以在if
statements,switch
statements和其他构造中使用,例如for
循环。
答案 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