这是素数筛的一个例子
package main
func Generate(ch chan<- int) {
for i := 2; ; i++ {
ch <- i
}
}
func Filter(in <-chan int, out chan<- int, prime int) {
for {
i := <-in
if i%prime != 0 {
out <- i
}
}
}
func main() {
ch := make(chan int)
go Generate(ch)
for i := 0; i < 10; i++ {
prime := <-ch
print(prime, "\n")
ch1 := make(chan int)
go Filter(ch, ch1, prime)
ch = ch1
}
}
我理解的是这行代码
prime := <-ch
通道正在等待输入并分配给素数。那么,为什么在调用下一条语句时不打印所有数字
print(prime, "\n")
如果我删除最后 3 行
ch1 := make(chan int)
go Filter(ch, ch1, prime)
ch = ch1
那么所有的数字都从 2 到 11 打印出来。这行 ch = ch1 有什么作用?
不负相思意
波斯汪
相关分类