ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## 统计1-8000哪些是素数 ``` package main import ( "fmt" "time" ) func putNum(intChan chan int) { for i := 1; i <= 8000; i++ {         intChan <- i     } close(intChan) } func primeNum(intChan chan int, primeChan chan int, exitChan chan bool) { for {         time.Sleep(time.Millisecond) //由于输出流的问题,不加sleep有可能导致退出提前输出,实际执行顺序是对的 num, ok := <-intChan if !ok { break //取不到了 } flag := true //判断num是否为素数 for i := 2; i < num; i++ { if num%i == 0 { //num不是素数 flag = false break } if flag {             primeChan <- num         } }     fmt.Println("有一个primeNum协程因为取不到数据,退出") //向exitchan写入退出标识 exitChan <- true } func main() { intChan := make(chan int, 1000) primeChan := make(chan int, 2000) //存放结果 exitChan := make(chan bool, 4)    //退出标识 //开启一个协程,向intChan放入 1-8000 go putNum(intChan) //开启4个协程,从intChan取出数据并判断是否为素数,如果是就放入到primechan for i := 0; i < 4; i++ { go primeNum(intChan, primeChan, exitChan)     } //主线程进行处理 go func() { for i := 0; i < 4; i++ {             <-exitChan } //当exitchan取出4个结果时,就可以关闭primeChan close(primeChan)     }() //遍历结果 for { v, ok := <-primeChan if !ok { break         }         fmt.Printf("素数=%d\\n", v)     }     fmt.Printf("主线程退出\\n") } ```