首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Golang多值函数组合

Golang多值函数组合
EN

Stack Overflow用户
提问于 2014-11-02 03:31:33
回答 3查看 2K关注 0票数 2

一个我还没有找到答案的小问题:当一个内部函数有多个返回值时,我该如何编写复合函数调用?

子问题:您是否可以在不使用temp变量的情况下仅转换多值函数的一个返回值?

示例:http://play.golang.org/p/intnxkzSO1

代码语言:javascript
复制
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()))
}
EN

回答 3

Stack Overflow用户

发布于 2014-11-02 07:47:02

您可以让外部函数与内部函数的返回值相匹配

代码语言:javascript
复制
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参数。

代码语言:javascript
复制
func noOp(a ...int) int {
    if len(a) > 0 {
        return a[0]
    }
    return 0
}
票数 2
EN

Stack Overflow用户

发布于 2014-11-02 03:39:15

例如,

代码语言:javascript
复制
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()))
}
票数 0
EN

Stack Overflow用户

发布于 2015-04-07 05:57:21

您还可以返回一个返回多个值的函数。

代码语言:javascript
复制
func f() (int, int) {
    return 1, 2
}

func g() (int, int) {
    return f()
}
票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26692327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档