我该怎么做错误处理惯用方式
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)
}
}()
我有一个具有逻辑的协程:
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)
}
}()