当main退出时,goroutine会运行defer()吗?[副本]

ffscu2ro  于 2023-09-28  发布在  Go
关注(0)|答案(1)|浏览(87)

这个问题已经有答案了

What happens to unfinished goroutines when the main/parent goroutine exits or returns?(1个答案)
去年就关门了。
如果我有一个goroutine,我可以用这样的方法关闭一个在goroutine上打开的通道吗?
defer(close())
或者当main退出时,defer语句不会为goroutine运行?

brqmpdu1

brqmpdu11#

不,你不能。一旦main完成,整个程序终止。因此,如果需要的话,您必须手动同步优雅终止。有整齐的图案,但这是另一个故事。
但看起来你根本不需要结案陈词。让chanels保持开放是好的,它们是完全受管理的资源,最终将被垃圾收集。关闭更多的是一种设计/意图行为,而不是必要的清理。
P.S.如果你在main的级别上执行defer something(),那么在main返回后,确实会执行something。你可以信赖这种行为。

相关问题