Go:JSON封送错误

Go:JSON封送错误,go,marshalling,Go,Marshalling,我正在Go中构建一个JSONAPI,我想以JSON的形式返回错误响应 答复示例: { "error": "Invalid request syntax" } 我认为我可以创建一个实现错误接口的包装器结构,然后使用Go的json封送器作为获取错误的json表示的干净方法: type JsonErr struct { Err error `json:"error"` } func (t JsonErr) Error() string { return t.Err.Error

我正在Go中构建一个JSONAPI,我想以JSON的形式返回错误响应

答复示例:

{
    "error": "Invalid request syntax"
}
我认为我可以创建一个实现错误接口的包装器结构,然后使用Go的json封送器作为获取错误的json表示的干净方法:

type JsonErr struct {
    Err error `json:"error"`
}
func (t JsonErr) Error() string {
    return t.Err.Error()
}
这将只是将JSONER封送为
{“error”:{}}
,有没有办法使用默认的Go json封送器来编码此结构,或者我需要为JSONER结构编写一个快速自定义封送json

只需实现接口:

func main() {
    var err error = JsonErr{errors.New("expected")}
    json.NewEncoder(os.Stdout).Encode(err)
}

type JsonErr struct {
    error
}

func (t JsonErr) MarshalJSON() ([]byte, error) {
    return []byte(`{"error": "` + t.Error() + `"}`), nil
}
它不起作用的原因是
json.Marshal
对错误接口没有检测,并且大多数错误类型没有导出字段,因此反射无法显示这些字段