一个简单的例子:
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()))
}
为什么呢?我只是在测试语言的界限,并学习它对某些目的的灵活性。
答案 0 :(得分:8)
不,除了Spec:
中的一个特例described之外,你不能这样做作为一种特殊情况,如果函数或方法
g
的返回值在数量上相等并且可以单独分配给另一个函数或方法f
的参数,则调用{{1}将f(g(parameters_of_g))
的返回值按顺序绑定到f
的参数后,将调用g
。f
的调用除了f
的调用外,不得包含任何参数,g
必须至少有一个返回值。
除了临时变量(最好的选择)之外你能做的最好的事情就是:
g
游乐场:http://play.golang.org/p/VXv-tsYjXt
Variadic版本:http://play.golang.org/p/ulpdp3Hppj