我在这里遵循这个例子:
https://www.socketloop.com/tutorials/golang-smarter-error-handling-with-strings-contains-function
if !strings.Contains(err.Error(), "timed out") {
fmt.Printf("resulting error not a timeout: %s", err)
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我在代码中这样做,我会得到这个
err.Error未定义(类型interface {}是没有方法的接口)
我想知道我在这里做错了什么,以及我应该如何检查确切的错误(在我的情况下,我想从错误“切片边界超出范围”中恢复)
最好的,
使用类型断言获取error https://play.golang.org/p/BryV7YfZHS
defer func(){
err := recover().(error)
fmt.Println(err.Error())
}()
a := make([]int, 0)
a[1] = 0
Run Code Online (Sandbox Code Playgroud)
但我建议你不要这样做。首先,您不应该使用恢复。几乎在所有情况下,这都意味着您做错了什么。相反,修复出现问题的代码。
其次,不要使用字符串匹配来确定错误原因。它不好的原因有很多,但我只想说这不是 Go 的做事方式。我知道您可能正在使用 API,但它并没有给您留下选择的余地,而是尝试找到更好的方法。使用类型断言、类型开关来获取确切的错误类型并从那里开始。