我無法檢測到 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 關注
- 280 瀏覽
添加回答
舉報
0/150
提交
取消