为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
千万里不及你 2021-12-20 17:10:01
我在这里关注这个例子: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 以获取确切的错误类型并从那里开始。


查看完整回答
反对 回复 2021-12-20
  • 1 回答
  • 0 关注
  • 156 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号