首页 资讯 财经 公益 彩店 奇闻 速递 体育 提点 资讯 综合 企业 市场

首页
你现在的位置:

消息!go的数据类型-其他数据类型-channel(二)

2023-04-21 16:04:35    来源:腾讯云    作者:


【资料图】

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

编辑:qysb005

标签:

中国企业新闻网版权与免责声明:
1、中国企业新闻网所有内容的版权均属于作者或页面内声明的版权人。未经中国企业新闻网的书面许可, 任何其他个人或组织均不得以任何形式将河南企业网的各项资源转载、复制、编辑或发布使用于其他任何场合;不得把其中任何形式的资讯散发给其他方, 不可把这些信息在其他的服务器或文档中作镜像复制或保存;不得修改或再使用中国企业新闻网的任何资源。若有意转载本站信息资料, 必需取得中国企业新闻网书面授权。否则将追究其法律责任。
2、已经本网授权使用作品的,应在授权范围内使用,并注明“来源:中国企业新闻网”。违反上述声明者,本网将追究其相关法律责任。
3、凡本网注明“来源:XXX(非中国企业新闻网)”的作品,均转载自其它媒体,转载目的在于传递更多信息, 并不代表本网赞同其观点和对其真实性负责。本网转载其他媒体之稿件,意在为公众提供免费服务。如稿件版权单位或个人不想在本网发布, 可与本网联系,本网视情况可立即将其撤除。
图片欣赏
频道推荐
内容推荐
最近更新