Beim Umgang mit Formularen, die optionale Felder enthalten, ist es üblich, diese Felder als leere Zeichenfolgen, falsche boolesche Werte usw. darzustellen nullwertige Ganzzahlen in JSON. Bei Verwendung des omitempty-Flags in Golang-Strukturen werden diese Werte jedoch beim Mapping explizit ignoriert, was zu Problemen beim Aktualisieren von Dokumenten in MongoDB führen kann.
Erwägen Sie eine Coupon-Struktur in Golang mit als omitempty markierten Feldern:
type Coupon struct { Id int `json:"id,omitempty" bson:"_id,omitempty"` Name string `json:"name,omitempty" bson:"name,omitempty"` Status bool `json:"status" bson:"status"` }
Beim ersten Speichern werden alle nicht leeren Felder erfolgreich in MongoDB gespeichert. Wenn jedoch bei späteren Aktualisierungen ein optionales Feld in einen leeren Wert geändert wurde (z. B. ein deaktiviertes Kontrollkästchen), verhindert das omitempty-Flag, dass der leere Wert in die Struktur abgebildet wird. Infolgedessen kann der Aktualisierungsvorgang den Wert des vorhandenen Felds nicht ändern.
Das Problem tritt auf, weil die Typen bool und int nur zwei mögliche Werte haben (falsch und wahr, 0 und ungleich Null). Um der Notwendigkeit gerecht zu werden, drei Zustände darzustellen (nicht aktualisieren, auf „false“ setzen oder auf „true“ setzen) für Bool-Felder und ähnliche Fälle für Int-Felder, sollten die Strukturfelder so geändert werden, dass sie Zeiger verwenden.
type Coupon struct { Id *int `json:"id,omitempty" bson:"_id,omitempty"` Name string `json:"name,omitempty" bson:"name,omitempty"` Status *bool `json:"status" bson:"status"` }
Bei Zeigern stellt ein Nullwert ein ausgelassenes Feld dar. Bei Nicht-Null-Zeigern stellt der Wert, auf den verwiesen wird, den Wert des Felds dar. Somit können die folgenden Szenarien behandelt werden:
Durch die Verwendung von Zeigern und dem omitempty-Flag können Sie optionale Felder in Golang-Strukturen effektiv verarbeiten und gleichzeitig sicherstellen, dass Aktualisierungen korrekt durchgeführt werden, ohne vorhandene Werte in MongoDB zu überschreiben.
Das obige ist der detaillierte Inhalt vonWie gehe ich mit optionalen Feldern mit „omitempty' in Go um, wenn ich MongoDB-Dokumente aktualisiere?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!