我有以下代码:
package main
import (
"fmt"
)
func recoverFoo() {
if r := recover(); r != nil {
println("Recovered")
}
}
func foo() (int, error) {
defer recoverFoo()
panic("shit!")
}
func main() {
x, err := foo()
println("after foo x = " + fmt.Sprint(x))
if err != nil {
println("An error occured")
} else {
println("No error occured")
}
}
在这种情况下,我调用 foo(实际上我的函数 foo 正在调用第三方库,该库有时会引起恐慌,但有时还会返回错误)。如果它恐慌,我不能让它崩溃应用程序,但我需要知道出了什么问题,因为我必须错误地写入本地存储。
在这种情况下,从 Foo 返回的值可以具有 0 的有效值。因此,恢复设置x和err为默认值(0和nil)不会告诉我是否确实发生了错误...x
我看到两种可能的解决方案,(1)我将err和x包装成自定义返回类型,并假设如果它为nil,则会发生错误。(2)我有第三个返回布尔值,指定没有发生恐慌(它将默认为false)
他们是我在这里错过的东西吗,围绕着去错误处理和从恐慌中恢复过来。我是新来的,所以想要一些建议。
拉风的咖菲猫
相关分类