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

请教各位一个问题,求解答:go channel里的一点疑惑谢谢哈~

请教各位一个问题,求解答:go channel里的一点疑惑谢谢哈~

饮歌长啸 2019-10-08 13:02:09
packagemainimport("fmt""os""time")const(MAX_REQUEST_NUM=10CMD_USER_POS=1)var(savechanboolquitchanboolreqchan*Request)typeRequeststruct{CmdIdint16Datainterface{}}typeUserPosstruct{xint16yint16}funcinit(){req=make(chan*Request,MAX_REQUEST_NUM)save=make(chanbool)quit=make(chanbool)}funcsaveGame(){fmt.Println("DosomethingwithSaveGame")quit
查看完整描述

2 回答

?
喵喵时光机

TA贡献1846条经验 获得超7个赞

main在向save发完true后,几乎立刻就结束了。main一结束,整个程序就结束了,这个时候saveGame很可能还没有机会能后执行。handler里的"reqchanclosed"可能也还没有执行机会。
<-quit会等待quit里的数据,而saveGame会在执行完后向quit发送数据。所以,这样可以保证main可能等到saveGame执行结束,从而可以看到saveGame的输出。并且使得"reqchanclosed"可能有执行的机会。
                            
查看完整回答
反对 回复 2019-10-08
?
繁星点点滴滴

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

main这个也是一个协程,和你的程序同步进行,也就是说,你不知道是你的协程先执行完,还是main函数执行完,如果你的协程先执行,那么main还是输出就是你想要的,但是如果是main函数先执行完,那么你的协程是执行了,但是并不会输出了。
                            
查看完整回答
反对 回复 2019-10-08
  • 2 回答
  • 0 关注
  • 242 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

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

帮助反馈 APP下载

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

公众号

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