如何从堆栈中的任何位置退出goroutine(从内部)?

时间:2013-07-30 16:53:59

标签: go goroutine

例如:

func foo() {
    // How can I exit the goroutine here?
}

func bar() {
    foo()
}

func goroutine() {
    for {
        bar()
    }
}

func main() {
    go goroutine()
}

如何直接从foo()bar()退出goroutine?我在考虑使用panicrecover,但我不确定它们是如何工作的。 (使用传统的异常处理,我只需将goroutine()的主体包装在try块中,并在我想退出时抛出异常。)

编辑:如果我使用panic,我甚至需要recover()吗?

1 个答案:

答案 0 :(得分:4)

运行时有一个函数可以退出goroutine:http://golang.org/pkg/runtime/#Goexit

runtime.Goexit()

如果你的恐慌逃脱了goroutine,整个程序都会感到恐慌。所以是的,你需要恢复。