package main
import (
"fmt"
)
func main() {
origin, wait := make(chan int), make(chan struct{})
Processor(origin, wait)
for num := 2; num < 1000; num++ {
origin <- num
}
close(origin)
<-wait
}
func Processor(origin chan int, wait chan struct{}) {
go func() {
prime, ok := <-origin
if !ok {
close(wait)
return
}
fmt.Println(prime)
out := make(chan int)
Processor(out, wait)
for n := range origin {
if n%prime != 0 {
out <- n
}
}
close(out)
}()
}
被这个函数给绕进去了,哪位大咖给解释解释?
不明白在 for n:= range origin 这行。
卤煮你换个思路,假设main中的Processor(origin, wait)执行后(不考虑go 的闭包,假设他还没来得及运行),立即跑完了for 2-1000的循环,在回头看下,现在知道origin 里面是神马了吧
实际程序中应该是for没走完,第一层Processor就开始了
https://36kr.com/p/5073181.html