是否有可能在Go中的单值上下文中有选择地获取返回值?

时间:2014-12-01 13:22:07

标签: go return-value

一个简单的例子:

package main

import "fmt"

func hereTakeTwo() (x, y int) {
    x = 0
    y = 1
    return
}

func gimmeOnePlease(x int){
    fmt.Println(x)
}

func main() {
    gimmeOnePlease(hereTakeTwo()) // fix me
}

是否可以使用显式hereTakeTwo()分配仅从_ 传递第一个返回值?我想避免的例子:

func main() {
    okJustOne, _ := hereTakeTwo()
    gimmeOnePlease(okJustOne)
}

我想要的是让gimmeOnePlease函数能够接收未定义数量的参数,但只采用第一个 OR 来调用hereTakeTwo函数并且只获得第一个返回值,无需使用_分配。

或者在最后的手段(疯狂的想法)使用某种适配器功能,它需要N个args并且只返回第一个,并且有类似的东西:

func main() {
    gimmeOnePlease(adapter(hereTakeTwo()))
}

为什么呢?我只是在测试语言的界限,并学习它对某些目的的灵活性。

1 个答案:

答案 0 :(得分:8)

不,除了Spec:

中的一个特例described之外,你不能这样做
  

作为一种特殊情况,如果函数或方法g的返回值在数量上相等并且可以单独分配给另一个函数或方法f的参数,则调用{{1}将f(g(parameters_of_g))的返回值按顺序绑定到f的参数后,将调用gf的调用除了f的调用外,不得包含任何参数,g必须至少有一个返回值。

除了临时变量(最好的选择)之外你能做的最好的事情就是:

g

游乐场:http://play.golang.org/p/VXv-tsYjXt

Variadic版本:http://play.golang.org/p/ulpdp3Hppj