一个我还没有找到答案的小问题:当一个内部函数有多个返回值时,我该如何编写复合函数调用?
子问题:您是否可以在不使用temp变量的情况下仅转换多值函数的一个返回值?
示例: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()))
}发布于 2014-11-02 07:47:02
您可以让外部函数与内部函数的返回值相匹配
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包。
Go play
另一种选择是使用variadic参数。
func noOp(a ...int) int {
if len(a) > 0 {
return a[0]
}
return 0
}发布于 2014-11-02 03:39:15
例如,
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()))
}发布于 2015-04-07 05:57:21
您还可以返回一个返回多个值的函数。
func f() (int, int) {
return 1, 2
}
func g() (int, int) {
return f()
}https://stackoverflow.com/questions/26692327
复制相似问题