(相关资料图)
以下是一个使用Channel的示例程序,该程序创建了两个Goroutine,并使用Channel在它们之间进行通信和同步。
package mainimport ("fmt""time")func worker(id int, jobs <-chan int, results chan<- int) {for j := range jobs {fmt.Printf("worker %d started job %d\n", id, j)time.Sleep(time.Second)fmt.Printf("worker %d finished job %d\n", id, j)results <- j * 2}}func main() {jobs := make(chan int, 100)results := make(chan int, 100)for w := 1; w <= 3; w++ {go worker(w, jobs, results)}for j := 1; j <= 9; j++ {jobs <- j}close(jobs)for a := 1; a <= 9; a++ {<-results}}
在这个示例程序中,我们定义了一个名为worker
的函数,它模拟了一个工作任务。这个函数接收一个jobs
的单向Channel用于接收工作任务,以及一个results
的单向Channel用于发送工作结果。当函数接收到一个工作任务时,它会等待一秒钟,然后将工作结果发送到results
的Channel中。
在main
函数中,我们创建了两个Channel:一个jobs
的Channel用于发送工作任务,一个results
的Channel用于接收工作结果。然后,我们启动了三个Goroutine,并将它们分别分配给worker
函数。接下来,我们向jobs
的Channel中发送了9个工作任务,并关闭了这个Channel。最后,我们从results
的Channel中接收了9个工作结果。
在这个示例程序中,我们使用Channel实现了工作任务的分配和工作结果的收集。通过使用Channel,我们可以轻松地实现Goroutine之间的通信和同步,从而使程序变得简单和高效。
关键词:
go的数据类型-其他数据类型-channel(二)
重温革命历史 汲取奋进力量——资兴市委党校春季主体班开展现场教学活动
for sale是什么意思_sale是什么意思
全球热点!长春国际汽车城汽车人才生态小镇启用,奥迪首批专家正式入住
探寻能源绿色转型之路 首届中国企业碳中和表现榜隆重揭晓
2022年重庆保险行业年度赔付支出346.4亿元|环球关注
环球观速讯丨立冬吃饺子的由来_立冬吃饺子来历故事介绍
4月23为什么要上课
停止招生!日本两所大学宣布
舌尖上的碳排放,怎么减?|世界看点
环球视点!生态环境部等5部门联合印发《重点流域水生态环境保护规划》
海口“世界地球日”湿地宣讲进校园 科普红树林生存法宝
热点在线丨迈凯轮是否塞纳了塞纳的表现数据
2023年市北区第二届“读书节”启动,线上线下近万名读者开启“青阅万马”万人马拉松读书活动 每日速递
我们的大中国歌词单_我们的大中国歌词-通讯
路由器上不了网怎么办_无线路由器连接不上网络怎么办
第十届海峡两岸《周易》学术研讨会开幕 促两岸易学文化交流
杭萧钢构:叠层电池产线近期设备正在陆续交付 完成进场中
今日快讯:禹州市褚河街道:铁路安全从“小”抓 爱路护路靠大家
每日速讯:冲上热搜!因姓氏太罕见全村改姓“鸭”
浉河社区民警忙点啥?_全球讯息
玻璃行情周报(4.17-4.22) 全球百事通
世界热讯:重庆10个区县出现暴雨 12条中小河流出现1~3米涨水过程
天天速看:关于举办食品相关产品检验技术培训的通知
今日报丨外媒:苏丹形势严峻 西方多国准备伺机撤侨
美智光电IPO重启 家电企业分拆上市动作不断-焦点热讯
新车三角警示牌在哪里(新车的三角警示牌在哪)
她的腿不断地伤害着人们,现在她面临着离婚,女神周慧敏婚姻不幸福的原因
雅思考试时间和费用地点2023北京|环球热闻
全球观焦点:潮声丨“成功学大师”杨涛鸣终于落网,“成功”骗局为何能演这么多年?