程序员社区

如何安全地执行Goroutine?

如何安全地执行Goroutine?插图

概要:在goroutine中发生panic,会导致整个系统退出是一个很严重的问题。在这篇文章中,我将在go func(){}上编写一个带有panic恢复功能的简单包装库(包)。之后,我们可以在任何地方使用这个包来安全地执行Goroutine。

代码:让我们将包命名为async:

package async
import (
    "fmt"
)
/*
 * `Execute`提供异步安全地执行函数的方法,在可能发生panic时进行恢复。
 */
func Execute(fn func()) {
    go func() {
        defer recoverPanic()
        fn()
    }()
}
/*
 *当goroutine发送panic,将错误信息打印到控制台
 */
func recoverPanic() {
    if r := recover(); r != nil {
        err, ok := r.(error)
        if !ok {
            err = fmt.Errorf("%v", r)
        }
        fmt.Println(err)
    }
}

现在,您可以在项目中的任何地方轻松导入这个包,并安全地调用goroutine。例如,让我们看看下面的代码:

async.Execute(func() {
    someUint64, err = strconv.ParseUint("7770009", 10, 16)
    if err != nil {
       panic(err)
    }
})

这是一个非常实用的编程技巧,能防止go协程中一些可能存在的panic未捕获导致程序奔溃。

赞(0) 打赏
未经允许不得转载:IDEA激活码 » 如何安全地执行Goroutine?

一个分享Java & Python知识的社区