


Wie gehe ich mit „omitempty' mit „time.Time'-Feldern im Go JSON Marshaling um?
Dec 22, 2024 am 10:55 AMJSON omitempty mit time.Time-Feld: Eine benutzerdefinierte Lösung
Die Tag-Option omitempty funktioniert nicht mit time.Time, da es sich um eine Struktur handelt. Das bedeutet, dass der „Null“-Wert für eine Zeit.Zeit ein gültiger Wert ist, bei dem alle seine Feldwerte auf Null gesetzt sind, was vom JSON-Encoder nicht als „leer“ behandelt wird.
Um diese Herausforderung zu meistern, Lassen Sie uns einen benutzerdefinierten Ansatz erkunden, der einen Zeiger auf time.Time (*time.Time) verwendet und benutzerdefinierte Kodierung und Dekodierung implementiert.
Zeigerbasiert Lösung
Durch den Wechsel zu einem Zeiger werden Nullwerte vom JSON-Encoder als „leer“ interpretiert:
type MyStruct struct { Timestamp *time.Time `json:",omitempty"` Date *time.Time `json:",omitempty"` Field string `json:",omitempty"` }
Benutzerdefinierter Marshaler und Unmarshaler
Wenn Sie dies nicht möchten Wenn Sie Zeiger verwenden, können Sie benutzerdefinierte Marshaler- und Unmarshaler-Schnittstellen implementieren:
type MyStruct struct { Timestamp time.Time `json:"Timestamp"` Date time.Time `json:"Date"` Field string `json:"Field"` } func (ms MyStruct) MarshalJSON() ([]byte, error) { type Alias MyStruct if ms.Timestamp.IsZero() { ms.Timestamp = time.Time{} } if ms.Date.IsZero() { ms.Date = time.Time{} } return json.Marshal(Alias(ms)) } func (ms *MyStruct) UnmarshalJSON(data []byte) error { type Alias MyStruct aux := &Alias{} if err := json.Unmarshal(data, aux); err != nil { return err } *ms = MyStruct(aux) return nil }
Hier die Die MarshalJSON-Methode setzt nullwertige time.Time-Instanzen auf den entsprechenden Go-Nullwert und ermöglicht so die Handhabung leerer Felder.
Fazit
Die zeigerbasierte Lösung ist unkompliziert und effektiv. Wenn die Verwendung von Zeigern jedoch nicht möglich ist, bietet der benutzerdefinierte Marshaler/Unmarshaler-Ansatz eine flexible Möglichkeit, mit leeren time.Time-Werten umzugehen.
Das obige ist der detaillierte Inhalt vonWie gehe ich mit „omitempty' mit „time.Time'-Feldern im Go JSON Marshaling um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heißer Artikel

Hot-Tools-Tags

Heißer Artikel

Heiße Artikel -Tags

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

GO Language Pack Import: Was ist der Unterschied zwischen Unterstrich und ohne Unterstrich?

Wie schreibe ich Scheinobjekte und Stubs zum Testen in Go?

Wie kann ich kurzfristige Informationsübertragung zwischen Seiten im BeEGO-Framework implementieren?

Wie kann ich benutzerdefinierte Typ -Einschränkungen für Generika in Go definieren?

Wie kann ich Tracing -Tools verwenden, um den Ausführungsfluss meiner GO -Anwendungen zu verstehen?

Wie kann ich Linter und statische Analyse -Tools verwenden, um die Qualität und Wartbarkeit meines GO -Codes zu verbessern?

Wie schreibe ich Dateien in Go Language bequem?

Wie konvertieren Sie die Liste der MySQL -Abfrageergebnisse in eine benutzerdefinierte Struktur -Slice in Go -Sprache?
