Go使用errors.As处理JSON解析错误触发target类型panic如何解决?
问题原因
errors.As要求传入的第二个参数target必须是非空指针,指向的类型要么是接口类型,要么本身实现了error接口。
你代码中声明的uterr、serr是值类型,传递的&uterr属于*json.UnmarshalTypeError类型,虽然json.UnmarshalTypeError本身实现了error接口,但encoding/json标准库返回的这两类错误均为指针类型(*json.UnmarshalTypeError、*json.SyntaxError),类型不匹配触发了边界校验panic。
解决方案
将变量声明为对应错误的指针类型即可,修改后的代码如下:
import ( "encoding/json" "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) { // 处理JSON语法错误逻辑 return } }
内容的提问来源于stack exchange,提问作者ghostinecatnewyear
相关产品推荐
相关产品推荐

