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

reckless-huang · · 666 次点击
给两个小建议吧 1、关闭的channel可以用for range 来循环,所以最后打印素数的时候,可以写成 ```go for key := range resultChan { fmt.Printf("素数:%v\n", key) } ``` 2、写代码的时候,最好业务跟逻辑分离处理,比如把判断是否是素数的方法拆出来 ```go func judgData(intChan chan int, resultChan chan int, exitChan chan bool) { for { num, ok := <-intChan if !ok { fmt.Println("数据读取完毕") break } if isPrime(num) { resultChan <- num } } exitChan <- true fmt.Println("一个协程执行完毕") } func isPrime(n int) bool { if n < 2 { return false } for i := 2; i*i <= n; i++ { if n%i == 0 { return false } } return true } ``` 其他的就是一些个人习惯了,练习项目都无所谓 * 比如多个相邻的变量声明,我喜欢用var()包起来 * 比如多次用到的值,可以用常量代替 * 比如开多个协程的时候,我习惯用WaitGroup或Context来处理
#8
更多评论
就很奇怪,协程的确都已经结束了,但是计算好像没有结束:screen
#1
wg传入进去是值传递副本,要么取地址 要么闭包方式共用外部wg
#2