【发布时间】:2019-12-17 01:04:30
【问题描述】:
如果我有一个 goroutine,我可以使用类似的方法关闭我在该 goroutine 上打开的频道吗?
defer(close())
或者当 main 退出时,goroutines 没有运行 defer 语句?
【问题讨论】:
-
必须同步程序退出顺序。
-
当主通道退出时通道就消失了,所以在退出时关闭它是多余的。
-
defer非 main go 例程中的语句在 main 终止时不会执行。当 main 终止时,所有其他正在运行的 go 例程都被中断并在停止时终止。他们不执行defer指令。请注意,main 终止时不需要关闭通道。 -
首先要了解:goroutines never run defer()
defer()在函数退出时运行,这与 goroutine 退出时完全不同。 -
@Flimzy,但是当你启动一个 goroutine 时,go 明确要求它是一个函数调用。即使你使用
go func,你也必须用括号结束它go func {...}()
标签: go channel deferred goroutine