当 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
返回后执行。您可能会依赖此行为。
如果我有一个 goroutine,我可以使用类似这样的方法关闭我在那个 goroutine 上打开的频道吗?
defer(close())
或者当 main 退出时 goroutines 的 defer 语句不是 运行?
不,你不能。一旦 main
完成,整个程序就终止了。所以你必须手动同步优雅终止,如果你确实需要的话。有整齐的图案,但那是另一回事了。
然而,您似乎根本不需要关闭。保持通道打开很好,它们是完全托管的资源,最终将被垃圾收集。关闭更像是一个 design/intention 行为,而不是必要的清理。
P.S。如果你 defer something()
在 main
级别,那么 something
确实会在 main
返回后执行。您可能会依赖此行为。