例如:
func foo() {
// How can I exit the goroutine here?
}
func bar() {
foo()
}
func goroutine() {
for {
bar()
}
}
func main() {
go goroutine()
}
如何直接从foo()
或bar()
退出goroutine?我在考虑使用panic
和recover
,但我不确定它们是如何工作的。 (使用传统的异常处理,我只需将goroutine()
的主体包装在try
块中,并在我想退出时抛出异常。)
编辑:如果我使用panic
,我甚至需要recover()
吗?
答案 0 :(得分:4)
运行时有一个函数可以退出goroutine:http://golang.org/pkg/runtime/#Goexit
runtime.Goexit()
如果你的恐慌逃脱了goroutine,整个程序都会感到恐慌。所以是的,你需要恢复。