Valeurs JSON et NULL dans SQL avec Go
La gestion des valeurs NULL dans les bases de données SQL peut être un défi, en particulier lorsque vous travaillez avec JSON. Dans Go, les types comme Int64 et String ne prennent pas intrinsèquement en charge les valeurs NULL, ce qui nécessite des types de wrapper comme sql.NullInt64 et sql.NullString.
Cependant, lorsque ces types de wrapper sont utilisés dans des structures et JSON est généré à l'aide du package json, le format JSON résultant s'écarte de ce qui est attendu en raison de l'imbrication supplémentaire introduite par la structure du wrapper nature.
Résoudre le problème
Pour surmonter ce problème, une solution viable consiste à créer des types personnalisés qui adhèrent aux interfaces json.Marshaller et json.Unmarshaler. En intégrant le type sql.NullInt64, les avantages des méthodes SQL sont conservés tout en personnalisant simultanément la gestion JSON. Voici un exemple :
type JsonNullInt64 struct { sql.NullInt64 } func (v JsonNullInt64) MarshalJSON() ([]byte, error) { if v.Valid { return json.Marshal(v.Int64) } else { return json.Marshal(nil) } } func (v *JsonNullInt64) UnmarshalJSON(data []byte) error { // Unmarshalling into a pointer detects null values var x *int64 if err := json.Unmarshal(data, &x); err != nil { return err } if x != nil { v.Valid = true v.Int64 = *x } else { v.Valid = false } return nil }
En utilisant le type JsonNullInt64 personnalisé à la place de sql.NullInt64, l'encodage JSON s'aligne sur les attentes.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!