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"可能有执行的机会。
Qyouu
TA贡献1786条经验 获得超11个赞
main这个也是一个协程,和你的程序同步进行,也就是说,你不知道是你的协程先执行完,还是main函数执行完,如果你的协程先执行,那么main还是输出就是你想要的,但是如果是main函数先执行完,那么你的协程是执行了,但是并不会输出了。
添加回答
举报
0/150
提交
取消