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

求大佬指点哈!go channel里的一点疑惑

求大佬指点哈!go channel里的一点疑惑

白衣非少年 2019-10-17 10:02:49
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贡献1873条经验 获得超9个赞

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

TA贡献1786条经验 获得超11个赞

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

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信