我正在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个赞
错误的文档。如所述:
如果目标不是指向实现错误的类型或任何接口类型的非无指针,则会发生恐慌。如果错误为零,则返回假。
因此,您必须考虑以下几点:
json.UnmarshalTypeError不实现 。error*json.UnmarshalTypeError,因为该方法具有指针接收器(文档Error() string)基于文档,需要一个指向实现的指针,因此您需要
**json。UnmarshalTypeErrorerrors.Aserror
将代码更改为:
uterr := &json.UnmarshalTypeError{}
if errors.As(err, &uterr) {
// ...
return
}
- 1 回答
- 0 关注
- 220 浏览
添加回答
举报
0/150
提交
取消
