当main退出时,goroutines是否运行defer()?

时间:2019-12-16 16:51:07

标签: go channel deferred goroutine

如果我有goroutine,我可以使用类似的方法关闭在该goroutine上打开的通道吗?

defer(close())

还是在主出口退出时不为goroutine运行defer语句?

1 个答案:

答案 0 :(得分:2)

不,你不能。 main完成后,整个程序将终止。因此,如果需要,您必须手动同步正常终止。有整齐的图案,但这是另一个故事。

但是,您似乎根本不需要关闭。保持频道处于打开状态是很好的,它们是完全托管的资源,最终将被垃圾回收。关闭更多是一种设计/意图行为,而不是必要的清理。

P.S。如果您在defer something()级别main,则实际上something将在返回main之后执行。您可能会依靠这种行为。