在使用go开发时,协程没有执行就结束了整个运行过程。
代码示例如下:
开了两个协程执行doAction函数,却没有任何打印输出,就结束了运行。
原因分析
之前写Node.js的时候,都是单线程,没有出现过这种情况,
而GO语言是有一个主线程执行main函数,怀疑是不是因为主线程很快执行完,另外开的两个建立在主线程上的协程会被强制关闭?
尝试加了个延迟代码
time.Sleep(5000)
果然,正常打印了。
经过查阅资料,确认了:
Go语言中,当main函数运行结束后,所有正在运行的协程都会终止, 也就是说主线程就已经退出了,两个协程中的函数来不及执行,所以看不到打印。
解决方案
使用延迟肯定不是业务开始适用的方式,建议采用go语言的另一个特性,channel来解决,如下示例: