如何检查恢复中的确切错误类型?

我在这里关注这个例子:


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)

 }

但是,如果我在我的代码中这样做,我会得到这个


err.Error 未定义(类型 interface {} 是没有方法的接口)


我想知道我在这里做错了什么,我应该如何检查确切的错误(在我的情况下,我想从错误“切片边界超出范围”中恢复)


最好的,


千万里不及你
浏览 157回答 1
1回答

狐的传说

使用类型断言获取error https://play.golang.org/p/BryV7YfZHSdefer func(){    err := recover().(error)    fmt.Println(err.Error())}()a := make([]int, 0)a[1] = 0但我建议你不要这样做。首先,你不应该使用recover。在几乎所有情况下,这意味着你做错了什么。相反,修复恐慌的代码。其次,不要使用字符串匹配来确定错误的原因。它不好的原因有很多,但我只想说这不是 Go 的做事方式。我知道您可能正在使用的 API 并没有让您选择,而是尝试找到更好的方法。使用类型断言,输入 switch 以获取确切的错误类型并从那里开始。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go