Maison >développement back-end >Golang >Comment gérer efficacement les valeurs SQL NULL et JSON dans Go ?
Travailler avec des valeurs SQL NULL et JSON dans Go
Lorsque vous travaillez avec des valeurs nullables dans Go, il est courant d'utiliser des types comme sql.NullInt64 et sql.NullString. Cependant, ces types peuvent conduire à des résultats inattendus lors de la génération de JSON à partir d'une structure qui les contient. Plus précisément, la sortie JSON peut inclure un niveau supplémentaire car sql.Null*** est également une structure.
Solution de contournement
Pour résoudre ce problème, une solution de contournement consiste à créez un type personnalisé qui implémente les interfaces json.Marshaller et json.Unmarshaler. En intégrant le type sql.NullInt64, vous pouvez gérer de manière transparente les méthodes SQL tout en définissant votre propre comportement de marshaling et de démarshaling 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 will let us detect null 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 }
Lorsque vous utilisez ce type personnalisé au lieu de sql.NullInt64, la sortie JSON sera au format attendu, sans les éléments supplémentaires niveau.
Exemple
Vous pouvez tester cet exemple sur le lien suivant :
http://play.golang.org/p/zFESxLcd -c
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!