为了账号安全,请及时绑定邮箱和手机立即绑定

如何确保按通道生产和消费数据是安全的

如何确保按通道生产和消费数据是安全的

Go
一只萌萌小番薯 2022-06-27 10:06:49
我是golang的新手,这是我的目的,我想让2个例程与一个公共频道同时运行,消费者应该在频道创建后启动并始终获取数据直到频道关闭,我的代码模板如下:var userChannel chan stringfor index := 0; index < *clientNums; index++ {        wg.Add(1)        go run1()        go run2()    }    wg.Wait()}func run1() {   defer wg.Done()   // ...some logic   userChannel = make(chan string, *readUserNums)   for index := 0; index < *readUserNums; index++ {         //...some logic         userChannel <- userId         //...some logic   }   close(userChannel)}func run2() {   for sendId := range userChannel {       //...some logic}}在我的代码中,如果run2首先运行它会很恐慌,因为尚未创建通道并且通道中没有数据。我怎样才能达到我的目的?谢谢你
查看完整描述

2 回答

?
守候你守候我

TA贡献1802条经验 获得超10个赞

首先创建通道,然后将其传递到您的 goroutines 中,而不是将其存储在全局中并动态创建它。



查看完整回答
反对 回复 2022-06-27
?
米脂

TA贡献1836条经验 获得超3个赞

即使userChannel最初没有数据存在,只要创建了它就不会成为问题userChannel,这里它失败了,因为没有创建通道。

run1在调用或run2传递通道之前创建通道始终是最佳实践。

仅供参考:如果通道是由通道上没有数据创建的,并且如果我们尝试从通道中读取数据,这将是一个阻塞调用,并且将等待直到将数据接收到等待通道中。


查看完整回答
反对 回复 2022-06-27
  • 2 回答
  • 0 关注
  • 114 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号