如果我有goroutine,我可以使用类似的方法关闭在该goroutine上打开的通道吗?
defer(close())
还是在主出口退出时不为goroutine运行defer语句?
答案 0 :(得分:2)
不,你不能。 main
完成后,整个程序将终止。因此,如果需要,您必须手动同步正常终止。有整齐的图案,但这是另一个故事。
但是,您似乎根本不需要关闭。保持频道处于打开状态是很好的,它们是完全托管的资源,最终将被垃圾回收。关闭更多是一种设计/意图行为,而不是必要的清理。
P.S。如果您在defer something()
级别main
,则实际上something
将在返回main
之后执行。您可能会依靠这种行为。