谁来帮我看看这个程序的运行过程。。。

发布于 2022-08-29 23:03:57 字数 607 浏览 15 评论 0

这个程序很简单,作用也很明显,就是打印20个素数。
但是。。。怎么做到的。。。
要被逼疯了。。。

package main

import (
. "fmt"
)

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 < 20; i++ {
        prime := <-ch
        Println(prime, "n")
        ch1 := make(chan int)
        go Filter(ch, ch1, prime)
        ch = ch1
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

逐鹿 2022-09-05 23:03:57

楼主,几个要点:
1。ch, ch1是size为1的channel,放入一个数后,如果未被取出,再次放入数,会阻塞;
2。go Generate(ch)并发产生数字,并且为异步的形式,如果ch是阻塞的,也不会影响下面程序的执行;
3。for i := 0; i < 20; i++ { } 会执行20次;
4.prime := <-ch,将素数取出,第一个为2,不用到go Filter
5.ch1是取出素数的
6。Filter是验证数字是否是素数,Generate 在产生数字,放入了in,在Filter中的in中取出,验证,是素的话放入out,主进程从ch1(out)中拿出素数。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文