有人可以帮我了解如何在函数返回中解释以下代码行-(_,_
我知道该函数返回两个 channel 。但是我不明白如何使用以下命令(_,_

tee := func(
    done <-chan interface{},
    in <-chan interface{},
) (_, _ <-chan interface{}) {
    out1 := make(chan interface{})
    out2 := make(chan interface{})

    go func() {
        defer close(out1)
        defer close(out2)

        for val := range orDone(done, in) {
            var out1, out2 = out1, out2
            for i := 0; i < 2; i++ {
                select {
                case <-done:
                case out1 <- val:
                    out1 = nil
                case out2 <- val:
                    out2 = nil
                }
            }
        }
    }()
    return out1, out2
}`

最佳答案

(_, _ <-chan interface{})(<-chan interface{}, <-chan interface{})等效。除了源代码的长度和可读性之外,没有其他区别。

  • 我们从(<-chan interface{}, <-chan interface{})返回值类型开始。
  • 由于返回值可以具有名称,因此可以编写(ch1 <-chan interface{}, ch2 <-chan interface{})以返回相同的2个 channel 。
  • 具有相同类型的参数(或返回值)序列可以省略除最后一个变量以外的所有变量的类型。因此,我们的返回类型变为:(ch1, ch2 <-chan interface{})
  • 而且由于我们实际上不需要返回值的名称,因此可以用下划线替换名称,使它们再次成为匿名名称:(_, _ <-chan interface{})

  • 瞧!一对相同类型的可读 channel 。

    关于function - 返回两个 channel 的GoRoutine,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54079506/

    10-13 05:36