2 回答
TA贡献1812条经验 获得超5个赞
这里的问题是您使用匿名结构作为ErrorMessage. 例如,元素类型ErrorMessage.Errors是匿名结构。的类型ErrorMessage.Meta也是一个匿名结构。
不幸的是,使用匿名结构类型初始化变量需要您复制匿名结构声明,有关示例和更多详细信息,请参阅此答案。
我的建议是像这样命名你的匿名结构类型:
type MyErr struct {
Code string `json:"code"`
Message string `json:"message"`
Field string `json:"field,omitempty"`
}
type MyMeta struct {
Status string `json:"status"`
}
type ErrorMessage struct {
Errors []MyErr `json:"errors"`
Meta MyMeta `json:"meta"`
}
然后你的任务变得非常简单:
res := ErrorMessage{
Errors: []MyErr{
MyErr{
Code: "short-code",
Message: "Wow, such bad!",
},
MyErr{
Code: "other-code",
Message: "OMG, very error!",
Field: "This is the field",
},
},
Meta: MyMeta{"error"},
}
data, err := json.MarshalIndent(&res, "", " ")
if err != nil {
panic(err)
}
fmt.Println(string(data))
这将产生您想要的输出。在Go Playground上试一试。
TA贡献1820条经验 获得超9个赞
如果将Error和Meta与内联结构分离为预定义的结构类型,则变得非常简单:
type Error struct {
Code string `json:"code"`
Message string `json:"message"`
Field string `json:"field,omitempty"`
}
type Meta struct {
Status string `json:"status"`
}
type ErrorMessage struct {
Errors []Error `json:"errors"`
Meta Meta `json:"meta"`
}
msg := ErrorMessage {
Errors: []Error{
{Code: "f00", Message: "bar", Field: "wat"},
},
Meta: Meta{"WAT"},
}
- 2 回答
- 0 关注
- 220 浏览
添加回答
举报