世界快看:go的数据类型-其他数据类型-channel(二)
2023-04-24 10:09:41 腾讯云


(资料图片仅供参考)

Channel的使用示例

以下是一个使用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之间的通信和同步,从而使程序变得简单和高效。

热门推荐

文章排行

  1. 2023-04-24世界快看:go的数据类型-其他数据类型-channel(二)
  2. 2023-04-24年纪轻轻就想守活寡_年纪轻轻-环球时讯
  3. 2023-04-24全球百事通!年报问询“刨根问底” 交易所紧盯“业绩变脸”
  4. 2023-04-24英媒:美国银行业“爆雷” 美议员“精准”抛股票
  5. 2023-04-24除了优化折痕还有啥用?vivo X Fold2铰链解析 每日动态
  6. 2023-04-24成都动物园工作人员被指要价500元捞手机,园方:不实,已举报 当前关注
  7. 2023-04-24环球即时:IPO周报|港股白酒第一股拟挂牌上市,本周5只新股申购
  8. 2023-04-24今日蒙面歌王第一季百度云下载_蒙面歌王第一季百度云
  9. 2023-04-24收视率第一!广东惨遭黑七出局,球迷标语催泪,杜锋公开道歉 每日焦点
  10. 2023-04-24全球观天下!潮起两江_关于潮起两江介绍
  11. 2023-04-24【全球聚看点】持续扩表的日本央行 行至政策调整的十字路口
  12. 2023-04-24当前快播:特斯拉吞下降价“苦果”
  13. 2023-04-24全球速讯:vga接口(vga)
  14. 2023-04-24长宁区遗嘱执行律师收费最新标准 天天热点
  15. 2023-04-24【世界播资讯】欧美正太
  16. 2023-04-2424小时尿蛋白定量怎么留取_24小时尿蛋白定量怎么做
  17. 2023-04-23解局 | 华侨城年报问询函里的监管疑问 当前时讯
  18. 2023-04-23【独家】重庆:构建共建共治共享治理新格局
  19. 2023-04-23今日热议:焊接接头包括哪三部分_焊接接头
  20. 2023-04-23小作坊里生产“飞利浦”灯泡 涉案金额达13万