go - 我怎样才能从堆栈的任何地方(从内部)退出 goroutine?

标签 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 block 中,并在我想退出时抛出异常。)

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

最佳答案

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

runtime.Goexit()

如果您的 panic 逃脱了 goroutine,整个程序都会 panic。所以是的,你需要恢复。

关于go - 我怎样才能从堆栈的任何地方(从内部)退出 goroutine?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17952953/

相关文章:

multithreading - 字符串与整数作为 golang 中内存利用率的映射键?

google-app-engine - 在 App Engine 上执行长时间运行的进程的正确方法是什么?

go - 我们是否应该为每个异步请求运行一个 goroutine,即使它们是彼此产生的?

curl - 如何使用 curl 将 xml 数据发布到一个简单的服务器

go - Go 中的语义注释有什么用?

audio - 使 go http 客户端与非标准的 http 服务器一起工作

concurrency - 数据未通过 channel 发送

http - 正确使用fasthttp.Client结合goroutines

string - 将字符串中单词的首字母大写

go - 如何实现链表