gpt4 book ai didi

go - panic : errors: *target must be interface or implement error in Go

转载 作者:行者123 更新时间:2023-12-05 09:30:32 28 4
gpt4 key购买 nike

我正在 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:panic: errors: *target must be interface or implement error

我们可以从github.com/pkg/errors documentation中了解到什么是目标:

func As(err error, target interface{}) bool

问题是 json.UnmarshalTypeErrorjson.SyntaxError 实际上都实现了 error 接口(interface)。我们可以从encoding/json documentation中了解到.所以我不知道我做错了什么。即使将 uterrserr 显式转换为 interface{} 也无法挽救这种情况。

github.com/pkg/errors 和标准 errors 包中都会发生 panic 。

最佳答案

errors.As 的文档状态:

As will panic if target is not a non-nil pointer to either a type that implements error, or to any interface type. As returns false if err is nil.

所以你必须考虑以下几点:

  1. json.UnmarshalTypeError 没有实现 error
  2. *json.UnmarshalTypeError 会,因为方法 Error() string 有一个指针接收器 ( docs )
  3. 根据文档,errors.As 需要一个指向实现 error 的指针,因此您需要 **json.UnmarshalTypeError

将代码更改为:

uterr := &json.UnmarshalTypeError{}
if errors.As(err, &uterr) {
// ...
return
}

关于go - panic : errors: *target must be interface or implement error in Go,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69447919/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com