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

When main exits, do goroutines run defer()?

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

defer(close())

或者当 main 退出时 goroutines 的 defer 语句不是 运行?

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

然而,您似乎根本不需要关闭。保持通道打开很好,它们是完全托管的资源,最终将被垃圾收集。关闭更像是一个 design/intention 行为,而不是必要的清理。

P.S。如果你 defer something()main 级别,那么 something 确实会在 main 返回后执行。您可能会依赖此行为。