Heim >Backend-Entwicklung >Golang >Wie kann ich beim Unmarshaling in Go zwischen JSON-Null- und fehlenden Feldern unterscheiden?
Unterscheidung von auf Null gesetzten und nicht vorhandenen JSON-Feldern beim Unmarshaling
Beim Unmarshaling von JSON in einer Golang-Struktur wird zwischen auf Null gesetzten Feldern unterschieden und Felder, die nicht vorhanden sind, können entscheidend sein. Beide Szenarien führen zu Nullwerten in der Struktur, wodurch die beabsichtigte Semantik verschleiert wird.
Differenzierung mithilfe von Generika (Go 1.18)
Go 1.18 führt Generika ein und ermöglicht eine präzise Lösung mit ein einzelner generischer Typ:
type Optional[T any] struct { Defined bool Value *T }
Dieser Typ kapselt das Konzept eines optionalen Werts mit einem definierten Feldstatus (Definiert).
Beispielverwendung:
type Payload struct { Field1 Optional[string] `json:"field1"` Field2 Optional[int] `json:"field2"` }
Nach dem Unmarshaling werden Felder mit definierten Werten (Definiert = = true) kann zwischen Nullwerten (Value == nil) und fehlenden Werten (Defined ==) unterscheiden false).
Pre-Generics Solutions
Benutzerdefinierter Typ-Wrapper:
type OptionalString struct { Defined bool Value *string } func (os *OptionalString) UnmarshalJSON(data []byte) error { os.Defined = true return json.Unmarshal(data, &os.Value) }
Beispiel Verwendung:
type Payload struct { Field1 string `json:"field1"` Field2 OptionalString `json:"field2"` }
Einschränkungen:
Das obige ist der detaillierte Inhalt vonWie kann ich beim Unmarshaling in Go zwischen JSON-Null- und fehlenden Feldern unterscheiden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!