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

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

defer(close())

或者当 main 退出时,不是为 goroutine 运行 defer 语句吗?


当年话下
浏览 166回答 1
1回答

墨色风雨

不,你不能。一旦main完成,整个程序就终止了。因此,如果确实需要,您必须手动同步优雅终止。有整齐的图案,但这是另一回事。然而,您似乎根本不需要关闭。保持通道开放很好,它们是完全托管的资源,最终将被垃圾收集。关闭更多的是一种设计/意图行为,而不是必要的清理。PS如果你defer something()在main'级别,那么返回something后确实会被执行main。您可以依赖此行为。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go