golang json.Marshal(error) 返回 `{}`, 问题分析与解决方案
序列化 Go 语言中的 error 接口问题:问题发现、原因与解决方案 在开发 Go 语言项目时,我们常常需要将结构体序列化为 JSON 格式。然而,当结构体中包含 error 接口时,序列化结果往往会不如预期。在这篇博客中,我们将讨论这个问题的原因,并提供两种解决方案。
问题描述 我们有一个结构体 CustomError,其中包含一个 error 类型的字段。如下所示:
package main import ( "encoding/json" "fmt" ) type CustomError struct { UserID int64 Err error } func (e *CustomError) Error() string { return fmt.Sprintf("user %d: %s", e.UserID, e.Err.Error()) } func main() { var errs []CustomError errs = append(errs, CustomError{UserID: 1, Err: fmt.Errorf("error 1")}) errs = append(errs, CustomError{UserID: 2, Err: fmt.Errorf("error 2")}) errs = append(errs, CustomError{UserID: 3, Err: fmt.……