2 回答
TA贡献1777条经验 获得超10个赞
您的代码的输出是:
2
3
5
7
11
13
17
19
23
29
所以程序是这样的:
我=0,
之后prime := <-ch,素数=2,ch={3};
之后go Filter(ch, ch1, prime),标记为Filter0,在函数中Filter0channelin将是 3,4,5,6 ... 并且 channelout将是 3,5,7 ...;
之后ch = ch1,所以 ch = {3},即 3,5,7。
我=1,
之后prime := <-ch,素= 3,CH = {5},为什么会出现5在ch“因为现在?ch是ch1在最后一环;
之后go Filter(ch, ch1, prime),标记为Filter1,在函数中Filter1channelin将是 5,7,9,11 ... 并且 channelout将是 5,7,11 ...;
之后ch = ch1,所以 ch = {3},即 5,7,11。
i=2,相同。
那它怎么输出。
TA贡献1811条经验 获得超4个赞
并非所有数字都被打印的原因是因为它在循环的每次迭代中都不是同一个通道。它创建一个新通道 ch1 并将值从 ch 过滤到 ch1,然后将 ch 分配给 ch1,以便下一次迭代 ch 是来自前一次迭代(称为 ch1)的新通道,并且那里的值已被过滤器过滤协程。
这是另一种编写它的方法,可能对您更有意义:
for i := 0; i < 10; i++ {
prime := <-ch
print(prime, "\n")
oldch := ch //here oldch references the old channel
ch = make(chan int) //and here ch is replaced with a new channel
go Filter(oldch, ch, prime) //and here a filter is applied to values from oldch to ch
}
- 2 回答
- 0 关注
- 196 浏览
添加回答
举报