golang管道通道-作为一个单独的功能工作,但不';t作为主要功能的一部分工作
我是新手,目前我正试图了解频道同步是如何工作的。我正在解决一项测试任务,该任务要求我从通道构建管道。我写了两个类似的解决方案,但其中一个由于未知原因(对我来说)不起作用 这不起作用(go例程直接从函数启动): 这是可行的(go例程从一个单独的函数开始):golang管道通道-作为一个单独的功能工作,但不';t作为主要功能的一部分工作,go,Go,我是新手,目前我正试图了解频道同步是如何工作的。我正在解决一项测试任务,该任务要求我从通道构建管道。我写了两个类似的解决方案,但其中一个由于未知原因(对我来说)不起作用 这不起作用(go例程直接从函数启动): 这是可行的(go例程从一个单独的函数开始): 我完全迷路了,我看不出有什么区别,也不明白为什么第一个例子不起作用。有人知道吗?您正在跨goroutine使用捕获变量fn,在该变量中,该变量将在迭代过程中被覆盖。所有goroutines看到的是funcs中的最新作业。将管道功能中的代码更
我完全迷路了,我看不出有什么区别,也不明白为什么第一个例子不起作用。有人知道吗?您正在跨
goroutine
使用捕获变量fn
,在该变量中,该变量将在迭代过程中被覆盖。所有goroutines
看到的是funcs
中的最新作业。将管道
功能中的代码更改为以下内容:
for _, fn := range funcs {
out = make(chan interface{})
wg.Add(1)
go func(f job, inx, outx chan interface{}) {
f(inx, outx)
close(outx)
wg.Done()
}(fn, in, out)
in = out
}
这是戈朗最有名的一家酒店 您正在跨
goroutine
使用捕获变量fn
,在该变量中,该变量将在迭代过程中被覆盖。所有goroutines
看到的是funcs
中的最新作业。将管道
功能中的代码更改为以下内容:
for _, fn := range funcs {
out = make(chan interface{})
wg.Add(1)
go func(f job, inx, outx chan interface{}) {
f(inx, outx)
close(outx)
wg.Done()
}(fn, in, out)
in = out
}
这是戈朗最有名的一家酒店 你完全正确!我试图避免它与进出,但错过了与fn!非常感谢你,我因此无法入睡!:你完全正确!我试图避免它与进出,但错过了与fn!非常感谢你,我因此无法入睡!:D