3

例如:

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

func bar() {
    foo()
}

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

func main() {
    go goroutine()
}

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

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

4

1 回答 1

5

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

runtime.Goexit()

如果你的恐慌从 goroutine 中逃脱,整个程序就会恐慌。所以是的,你需要恢复。

于 2013-07-30T17:09:28.280 回答