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

我正在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


侃侃无极
浏览 221回答 1
1回答

墨色风雨

错误的文档。如所述:如果目标不是指向实现错误的类型或任何接口类型的非无指针,则会发生恐慌。如果错误为零,则返回假。因此,您必须考虑以下几点:json.UnmarshalTypeError不实现 。error*json.UnmarshalTypeError,因为该方法具有指针接收器(文档Error() string)基于文档,需要一个指向实现的指针,因此您需要**json。UnmarshalTypeErrorerrors.Aserror将代码更改为:uterr := &json.UnmarshalTypeError{}if errors.As(err, &uterr) {    // ...    return}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go