go 语言 goroutine通信
示例demo52
package main
import (
"fmt"
)
//taskChan <-chan 只读
//resChan chan<- 只写
//exitChan chan<- 只写
func calc(taskChan chan int, resChan chan int, exitChan chan bool) {
for v := range taskChan {
flag := true
for i := 2; i < v; i++ {
if v%i == 0 {
flag = false
break
}
}
if flag {
//值放到resChan 通道里
resChan <- v
}
}
fmt.Println("exit")
exitChan <- true
}
func main() {
intChan := make(chan int, 1000) //初始化 intchan 通道 长度1000
resultChan := make(chan int, 1000) //初始化 resultChan通道 长度1000
closeChan := make(chan bool, 8)
go func() { //协程方式放进10000个数到intChan通道里
for i := 0; i < 100000; i++ {
intChan <- i
}
close(intChan) //关闭intChan通道
}()
//启8个协程 运行计算 传入intChan 和resultChan
for i := 0; i < 8; i++ {
go calc(intChan, resultChan, closeChan)
}
//等待所有计算的goroutine全部退出
go func() {
for i := 0; i < 8; i++ {
<-closeChan
}
close(closeChan) //关闭closeChan通道
close(resultChan) //关闭resultChan通道
}()
//循环 resultChan遍历数据
for v := range resultChan {
fmt.Println(v)
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具