JSON- und NULL-Werte in SQL mit Go
Der Umgang mit NULL-Werten in SQL-Datenbanken kann eine Herausforderung sein, insbesondere bei der Arbeit mit JSON. In Go unterstützen Typen wie Int64 und String grundsätzlich keine NULL-Werte, sodass Wrapper-Typen wie sql.NullInt64 und sql.NullString erforderlich sind.
Allerdings, wenn diese Wrapper-Typen in Strukturen und JSON verwendet werden Wird mithilfe des JSON-Pakets generiert, weicht das resultierende JSON-Format aufgrund der zusätzlichen Verschachtelung, die durch die Struktur des Wrappers eingeführt wird, von den Erwartungen ab Natur.
Lösung des Problems
Um dieses Problem zu lösen, besteht eine praktikable Lösung in der Erstellung benutzerdefinierter Typen, die den Schnittstellen json.Marshaller und json.Unmarshaler entsprechen. Durch die Einbettung des Typs sql.NullInt64 bleiben die Vorteile von SQL-Methoden erhalten und gleichzeitig wird die JSON-Verarbeitung angepasst. Hier ist ein Beispiel:
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 }
Durch die Verwendung des benutzerdefinierten Typs JsonNullInt64 anstelle von sql.NullInt64 entspricht die JSON-Codierung den Erwartungen.
Das obige ist der detaillierte Inhalt vonWie geht man mit Go effektiv mit NULL-Werten in JSON und SQL um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!