2 回答

TA貢獻1842條經(jīng)驗 獲得超13個贊
您可以json.Marshaler為任一obj或內(nèi)部的特定字段實施obj。此封送拆收器可以檢查字段的值并返回錯誤。這是一個為字段添加自定義封送拆收器的示例,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"`
}
編組時,json.Marshal()
檢查類型是否實現(xiàn)json.Marshaler
,如果是,它會調(diào)用MarshalJSON()
它們而不是嘗試編組項目本身。

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