我正在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個贊
錯誤的文檔。如
所述:
如果目標不是指向實現錯誤的類型或任何接口類型的非無指針,則會發生恐慌。如果錯誤為零,則返回假。
因此,您必須考慮以下幾點:
json.UnmarshalTypeError
不實現 。error
*json.UnmarshalTypeError
,因為該方法具有指針接收器(文檔Error() string
)基于文檔,需要一個指向實現的指針,因此您需要
**json。UnmarshalTypeError
errors.As
error
將代碼更改為:
uterr := &json.UnmarshalTypeError{}
if errors.As(err, &uterr) {
// ...
return
}
- 1 回答
- 0 關注
- 119 瀏覽
添加回答
舉報
0/150
提交
取消