我无法检测到 json。语法检查从失败的解码器返回的错误时出错。解码操作!在这里,您可以看到操场上的工作示例。如您所见,调试器向我确认它是指向json的指针。语法错误,但错误。是 无法检测到它。我检查了错误。是实现:func Is(err, target error) bool { if target == nil { return err == target } isComparable := reflectlite.TypeOf(target).Comparable() for { if isComparable && err == target { return true } if x, ok := err.(interface{ Is(error) bool }); ok && x.Is(target) { return true } // TODO: consider supporting target.Is(err). This would allow // user-definable predicates, but also may allow for coping with sloppy // APIs, thereby making it easier to get away with them. if err = Unwrap(err); err == nil { return false } }}它们是可比较的(可比较的变量是真的),但是,当我期望它在这样做时返回true时,它会继续......if isComparable && err == target {我做错了什么?提前致谢。
1 回答

沧海一幻觉
TA贡献1824条经验 获得超5个赞
当前发生的情况是,您将新邮件的内存地址与 从 返回的错误进行比较。正如你所注意到的,这永远不会是真的。json.SyntaxErrorDecode
您要执行的操作略有不同:检查是否为类型,然后直接使用该对象。这可以使用类型断言,它基本上检查接口的基础类型(在本例中)是否为更具体的类型。errSyntaxErrorerror
这就是错误。事实也确实如此。它填充您指定的特定错误类型。使用此方法,可以到达以下代码:
if err != nil {
var serr *json.SyntaxError
if errors.As(err, &serr) {
fmt.Println("Syntax error:", serr)
fmt.Println("Offset:", serr.Offset)
} else {
fmt.Println("Other error:", err)
}
}
- 1 回答
- 0 关注
- 296 浏览
添加回答
举报
0/150
提交
取消