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

死机:错误:*目标必须是接口或实现 Go 中的错误

死机:错误:*目标必须是接口或实现 Go 中的错误

Go
侃侃无极 2022-10-04 19:03:53
我正在Go中制作一个json取消编组错误处理函数:import "github.com/pkg/errors"func parseJSONError(err error) {    var uterr json.UnmarshalTypeError    if errors.As(err, &uterr) {        //...        return    }    var serr json.SyntaxError    if errors.As(err, &serr) {        //...        return    }}但是有一种恐慌: 。errors.As()panic: errors: *target must be interface or implement error我们可以从 github.com/pkg/errors 文档中学到什么是目标:func As(err error, target interface{}) bool问题在于两者都实际实现了接口。我们可以从编码/ json文档中学习它。所以我不知道我做错了什么。即使明确地铸造和到并不能挽救这种情况。json.UnmarshalTypeErrorjson.SyntaxErrorerroruterrserrinterface{}死机发生在两个包和标准包中。github.com/pkg/errorserrors
查看完整描述

1 回答

?
墨色风雨

TA贡献1853条经验 获得超6个赞

错误的文档。如所述:

如果目标不是指向实现错误的类型或任何接口类型的非无指针,则会发生恐慌。如果错误为零,则返回假。

因此,您必须考虑以下几点:

  1. json.UnmarshalTypeError不实现 。error

  2. *json.UnmarshalTypeError,因为该方法具有指针接收器(文档Error() string)

  3. 基于文档,需要一个指向实现的指针,因此您需要**json。UnmarshalTypeErrorerrors.Aserror

将代码更改为:

uterr := &json.UnmarshalTypeError{}

if errors.As(err, &uterr) {

    // ...

    return

}


查看完整回答
反对 回复 2022-10-04
  • 1 回答
  • 0 关注
  • 220 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

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

帮助反馈 APP下载

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

公众号

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