Golang多值函数组合
问题描述:
我还没有在SO上找到答案的简短问题:当内部函数有多个返回值时,如何编写复合函数调用?Golang多值函数组合
子问题:你可以只使用多值函数中的一个返回而不使用临时变量吗?
例子:http://play.golang.org/p/intnxkzSO1
package main
import "fmt"
func multiReturn() (int, int) {
return 0, 1
}
func noOp(a int) int {
return a
}
func main() {
// Too many arguments
fmt.Print(noOp(multiReturn()))
// multiple-value in single-value context
fmt.Print(string(multiReturn()))
}
答
例如,
package main
import "fmt"
func singleReturn() int {
s, _ := multiReturn()
return s
}
func multiReturn() (int, int) {
return 0, 1
}
func noOp(a int) int {
return a
}
func main() {
fmt.Print(noOp(singleReturn()))
fmt.Print(string(singleReturn()))
// Too many arguments
//fmt.Print(noOp(multiReturn()))
// multiple-value in single-value context
//fmt.Print(string(multiReturn()))
}
答
你可以有你的外在功能相匹配的内部函数
func multiReturn() (int, int) {
return 10, 1
}
func noOp(a, _ int) int {
return a
}
func main() {
fmt.Printf("%v\n", noOp(multiReturn())) // output: 10
fmt.Printf("%s", strconv.Itoa(noOp(multiReturn()))) // output: 10
}
的返回值在一个侧面说明字符串(int)将不起作用,您必须使用strconv
包。
转到play
另一种办法是使用variadic参数。
func noOp(a ...int) int {
if len(a) > 0 {
return a[0]
}
return 0
}
答
你也可以返回一个返回多个值的函数。
func f() (int, int) {
return 1, 2
}
func g() (int, int) {
return f()
}
这是有效的,但它不是真正的重点 - 在这里我们只是重新分配多个返回一个变量并返回它,所以我们仍然只是实际构成单值函数。 – 2014-11-01 20:05:20
这是您唯一的选择。 – peterSO 2014-11-01 20:17:30
好的,所以这是不可能的。好吧!谢谢。 – 2014-11-01 20:17:55