go error - 单值上下文中的多值fn()

Mar*_*tin 7 go

我想从函数fn()传递结果,将多个值返回到接受多个值的函数wantx().如果wantx()接受的值的数量与返回值的数量匹配,这似乎有效.例如,fn()返回2个值,而want2()接受2个值:

r:= want2( fn(5) )   // seems to work fine
Run Code Online (Sandbox Code Playgroud)

但是,如果我希望fn()的返回值充当want3()的参数2和3,那么我得到一个错误:

r:= want3( 1, fn(5) ) // error: multiple-value fn() in single-value context
Run Code Online (Sandbox Code Playgroud)

如果want3()不是,那么want2()是多值上下文怎么样?

如何调用want3()才能工作?

这是完整的程序:

package sandbox

import "testing"

func want3(fac int, i int, ok bool) int {
    if ok {
        return i * fac * 2
    }
    return i * fac * 3
}

func want2(i int, ok bool) int {
    if ok {
        return i * 2
    }
    return i * 3
}

func fn(i int) (int, bool) {
    return i, true
}

func TestCall(t *testing.T) {
    // error: multiple-value fn() in single-value context
    // r := want3(1, fn(5))

    r := want2( fn(5) )  // works fine

    if r != 10 {
        t.Errorf("Call!")
    }
}
Run Code Online (Sandbox Code Playgroud)

0xA*_*xAX 9

看到这里:

作为一种特殊的情况下,如果一个函数或方法克返回参数的个数相等且单独地分配给另一函数或方法f的参数,则该呼叫F(克(parameters_of_g))将调用F结合的返回值后g的顺序为f的参数.

不允许进行函数调用的其他特殊情况.