2 回答

TA貢獻(xiàn)1812條經(jīng)驗(yàn) 獲得超5個(gè)贊
這里的問題是您使用匿名結(jié)構(gòu)作為ErrorMessage. 例如,元素類型ErrorMessage.Errors是匿名結(jié)構(gòu)。的類型ErrorMessage.Meta也是一個(gè)匿名結(jié)構(gòu)。
不幸的是,使用匿名結(jié)構(gòu)類型初始化變量需要您復(fù)制匿名結(jié)構(gòu)聲明,有關(guān)示例和更多詳細(xì)信息,請(qǐng)參閱此答案。
我的建議是像這樣命名你的匿名結(jié)構(gòu)類型:
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"`
}
然后你的任務(wù)變得非常簡單:
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))
這將產(chǎn)生您想要的輸出。在Go Playground上試一試。

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超9個(gè)贊
如果將Error和Meta與內(nèi)聯(lián)結(jié)構(gòu)分離為預(yù)定義的結(jié)構(gòu)類型,則變得非常簡單:
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 關(guān)注
- 263 瀏覽
添加回答
舉報(bào)