gpt4 book ai didi

function - 返回两个 channel 的 GoRoutine

转载 作者:IT王子 更新时间:2023-10-29 01:40:40 26 4
gpt4 key购买 nike

谁能帮我理解如何解释函数返回中的以下代码行 - (_, _ <-chan interface{})

我知道该函数返回两个 channel 。但是我不明白它是如何使用以下(_,_ <-chan interface{})实现的。如果我只是将它换成 (<-chan interface{}, <-chan interface{}) 有什么区别?

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{}) .除了源代码长度和可读性之外,没有区别。

  1. 我们从 (<-chan interface{}, <-chan interface{}) 开始返回值类型。
  2. 因为返回值可以有名字,所以可以写成(ch1 <-chan interface{}, ch2 <-chan interface{})返回相同的 2 个 channel 。
  3. 具有相同类型的参数(或返回值)序列可以省略除最后一个变量之外的所有变量的类型。因此我们的返回类型变为:(ch1, ch2 <-chan interface{})
  4. 因为我们真的不需要返回值的名称,我们可以用下划线代替名称,再次使它们匿名:(_, _ <-chan interface{})

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

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com