2 回答

TA貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超13個(gè)贊
您可以json.Marshaler為任一obj或內(nèi)部的特定字段實(shí)施obj。此封送拆收器可以檢查字段的值并返回錯(cuò)誤。這是一個(gè)為字段添加自定義封送拆收器的示例,Name如果Name是"Boom!"
type NameWithValidation string
func (s NameWithValidation) MarshalJSON() ([]byte, error) {
? ? if string(s) == "Boom!" {
? ? ? ? return nil, fmt.Errorf("Name '%s' failed validation", s)
? ? }
? ? return json.Marshal(string(s))
}
type obj struct {
? ? Name NameWithValidation `json:"name"`
}
編組時(shí),json.Marshal()
檢查類(lèi)型是否實(shí)現(xiàn)json.Marshaler
,如果是,它會(huì)調(diào)用MarshalJSON()
它們而不是嘗試編組項(xiàng)目本身。

TA貢獻(xiàn)1921條經(jīng)驗(yàn) 獲得超9個(gè)贊
Channel、complex 和 function 值不能用 JSON 編碼。嘗試對(duì)此類(lèi)值進(jìn)行編碼會(huì)導(dǎo)致 Marshal 返回 UnsupportedTypeError。
因此,如果您要修改您的結(jié)構(gòu)以包含這些類(lèi)型中的任何一種并嘗試對(duì)其進(jìn)行編組,您將收到錯(cuò)誤消息。
- 2 回答
- 0 關(guān)注
- 175 瀏覽
添加回答
舉報(bào)