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

时间:2016-03-13 11:55:33

标签: go

我在这里遵循这个例子:

https://www.socketloop.com/tutorials/golang-smarter-error-handling-with-strings-contains-function

{{(partecipant}}

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

  

err.Error undefined(type interface {}是没有方法的接口)

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

最佳,

1 个答案:

答案 0 :(得分:1)

使用类型断言获取error https://play.golang.org/p/BryV7YfZHS

defer func(){
    err := recover().(error)
    fmt.Println(err.Error())
}()

a := make([]int, 0)
a[1] = 0

但我建议你不要这样做。首先,你不应该使用恢复。在几乎所有情况下,这意味着你做错了什么。相反,修复恐慌的代码。

其次,不要使用字符串匹配来确定错误的原因。有很多原因导致它不好但我只是说它不是Go的做事方式。我了解您可能正在使用的API不会让您做出选择,但会尝试找到更好的方法。使用类型断言,键入switch以获取确切的错误类型并从那里开始。