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

go channel里的一点疑惑

go channel里的一点疑惑

烙印99 2019-09-13 10:20:46
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贡献1784条经验 获得超2个赞

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

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

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

添加回答

举报

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