这个问题已经有答案了:
What happens to unfinished goroutines when the main/parent goroutine exits or returns?(1个答案)
去年就关门了。
如果我有一个goroutine,我可以用这样的方法关闭一个在goroutine上打开的通道吗?defer(close())
或者当main退出时,defer语句不会为goroutine运行?
这个问题已经有答案了:
What happens to unfinished goroutines when the main/parent goroutine exits or returns?(1个答案)
去年就关门了。
如果我有一个goroutine,我可以用这样的方法关闭一个在goroutine上打开的通道吗?defer(close())
或者当main退出时,defer语句不会为goroutine运行?
1条答案
按热度按时间brqmpdu11#
不,你不能。一旦
main
完成,整个程序终止。因此,如果需要的话,您必须手动同步优雅终止。有整齐的图案,但这是另一个故事。但看起来你根本不需要结案陈词。让chanels保持开放是好的,它们是完全受管理的资源,最终将被垃圾收集。关闭更多的是一种设计/意图行为,而不是必要的清理。
P.S.如果你在
main
的级别上执行defer something()
,那么在main
返回后,确实会执行something
。你可以信赖这种行为。