亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何檢測 json。語法錯誤,但存在錯誤。是

如何檢測 json。語法錯誤,但存在錯誤。是

Go
慕妹3146593 2022-08-15 17:05:31
我無法檢測到 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)

    }

}


查看完整回答
反對 回復 2022-08-15
  • 1 回答
  • 0 關注
  • 280 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號