为了账号安全,请及时绑定邮箱和手机立即绑定

当 main 退出时,goroutines 会运行 defer() 吗?

当 main 退出时,goroutines 会运行 defer() 吗?

Go
呼啦一阵风 2023-08-14 15:11:35
如果我有一个 Goroutine,我可以使用类似的方法关闭在该 Goroutine 上打开的通道吗?defer(close())或者当 main 退出时,是否不会为 goroutine 运行 defer 语句?
查看完整描述

1 回答

?
饮歌长啸

TA贡献1951条经验 获得超3个赞

不,你不能。一旦main完成,整个程序就终止了。因此,如果确实需要的话,您必须手动同步优雅终止。有整齐的图案,但那是另一回事了。

但似乎您根本不需要关闭。保持通道打开是可以的,它们是完全托管的资源,最终会被垃圾收集。关闭更多的是一种设计/意图行为,而不是必要的清理。

PS如果你defer something()是这个main级别的话,返回后确实something会被执行main。您可能会依赖这种行为。


查看完整回答
反对 回复 2023-08-14
  • 1 回答
  • 0 关注
  • 83 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信