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 關注
- 268 瀏覽
添加回答
舉報