我该怎么做错误处理惯用方式

How do I do go error handling idiomatic way

我有一个具有逻辑的协程:

result1, err := getResult1()
result2, err := getResult2(result)
result3, err := getResult3(result2)

如果我在 getResult1() 中出错,我根本不想继续这个 goroutine,但不要惊慌,因为它也破坏了 main。我以糟糕的方式实现了它,但是惯用的解决方案是什么?

惯用的方式是做某事

r, err := get()
if err != nil {
    // do something with err
    // do not continue
}
…

您可以return将错误告知调用者,由调用者决定如何处理。

你不必恐慌。你可以登录。

或者使用某个循环中的错误重试

在golang中,最好在出现错误时尽快处理

result1, err := getResult1()
if err != nil {
    // log your error and return
    return err
}
result2, err := getResult2(result)
result3, err := getResult3(result2)

如果您需要处理恐慌并重新控制恐慌的 goroutine,那么 recover() 就是您的选择:

 defer func() {
    if r := recover(); r != nil {
        fmt.Println("Recovering my panicing goroutine", r)
    }
}()