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

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

死機:錯誤:*目標必須是接口或實現 Go 中的錯誤

死機:錯誤:*目標必須是接口或實現 Go 中的錯誤

Go
侃侃無極 2022-10-04 19:03:53
我正在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個贊

錯誤的文檔。如所述:

如果目標不是指向實現錯誤的類型或任何接口類型的非無指針,則會發生恐慌。如果錯誤為零,則返回假。

因此,您必須考慮以下幾點:

  1. json.UnmarshalTypeError不實現 。error

  2. *json.UnmarshalTypeError,因為該方法具有指針接收器(文檔Error() string)

  3. 基于文檔,需要一個指向實現的指針,因此您需要**json。UnmarshalTypeErrorerrors.Aserror

將代碼更改為:

uterr := &json.UnmarshalTypeError{}

if errors.As(err, &uterr) {

    // ...

    return

}


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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