有老师能帮忙看看我的获取素数代码哪里有问题么,我只能取到一个素数3

reckless-huang · · 219 次点击 · 开始浏览    置顶
```go package main import ( "fmt" _ "reflect" "sync" "time" ) func writeData(intChan chan int) { for i := 1; i <= 8000; i++ { intChan <- i //fmt.Printf("writeData()写入数据%v", i) } close(intChan) //fmt.Println(intChan) } func judgData(intChan chan int, resultChan chan int, exitChan chan bool, done func()) { defer done() time.Sleep(time.Millisecond * 1000) flag := true //time.Sleep(time.Second *1) for { num, ok := <-intChan if !ok { fmt.Println("已从intChan读取所有数据") break } for i := 2; i < num; i++ { if num % i == 0 { flag = false break } if flag { resultChan <- num fmt.Printf("添加%v到resultChan\n", num) } } } fmt.Println("协程执行完毕") exitChan <- true } func main() { var wg sync.WaitGroup intChan := make(chan int, 10000) resultChan := make(chan int, 20000) exitChan := make(chan bool, 8) go writeData(intChan) for i := 0; i < 8; i++ { go judgData(intChan, resultChan, exitChan, wg.Done) } //go func() { // for i := 0 ; i < 8 ; i ++ { // key := <-exitChan // fmt.Print(key) // } // close(resultChan) //}() wg.Add(8) wg.Wait() close(resultChan) func() { for i := 0; i < 8; i++ { key := <-exitChan fmt.Printf("key=%v\n", key) } }() for { res, ok := <-resultChan if !ok { break } fmt.Printf("素数=%d\n", res) } } ```

有疑问加站长微信联系

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:812540095

219 次点击  
加入收藏 微博
9 回复  |  直到 2020-09-08 16:20:25
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传