我在这里关注这个例子: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 {} 是没有方法的接口)我想知道我在这里做错了什么,我应该如何检查确切的错误(在我的情况下,我想从错误“切片边界超出范围”中恢复)最好的,
1 回答
狐的传说
TA贡献1804条经验 获得超3个赞
使用类型断言获取error https://play.golang.org/p/BryV7YfZHS
defer func(){
err := recover().(error)
fmt.Println(err.Error())
}()
a := make([]int, 0)
a[1] = 0
但我建议你不要这样做。首先,你不应该使用recover。在几乎所有情况下,这意味着你做错了什么。相反,修复恐慌的代码。
其次,不要使用字符串匹配来确定错误的原因。它不好的原因有很多,但我只想说这不是 Go 的做事方式。我知道您可能正在使用的 API 并没有让您选择,而是尝试找到更好的方法。使用类型断言,输入 switch 以获取确切的错误类型并从那里开始。
- 1 回答
- 0 关注
- 156 浏览
添加回答
举报
0/150
提交
取消
