„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie kann ich benutzerdefiniertes JSON-Unmarshaling für abgeleitete Skalartypen in Go implementieren?

Wie kann ich benutzerdefiniertes JSON-Unmarshaling für abgeleitete Skalartypen in Go implementieren?

Veröffentlicht am 19.11.2024
Durchsuche:967

How Can I Implement Custom JSON Unmarshaling for Derived Scalar Types in Go?

Ableiten benutzerdefinierter Typen für JSON-Unmarshaling in Go

Bei der Arbeit mit benutzerdefinierten Typen in Go ist es häufig erforderlich, die Funktion UnmarshalJSON zu aktivieren, um sie zu aktivieren automatische Konvertierung von JSON in den gewünschten Typ. Allerdings ergeben sich Herausforderungen, wenn der Typ von einem Skalarwert abgeleitet wird. In diesem Artikel wird eine Lösung zur Lösung dieses Problems untersucht.

Betrachten Sie das Beispiel eines PersonID-Typs, der subtypisierte Ganzzahlkonstanten zur Identifizierung von Personen darstellt. Wir möchten die Funktionalität dieses Typs erweitern, um die automatische Konvertierung von JSON-Strings zu unterstützen. Die Implementierung von UnmarshalJSON für diesen Typ wird schwierig, da er einen Skalarwert direkt zurückgeben oder ändern soll, während UnmarshalJSON eine Struktur für seine Änderung erwartet.

Um dieses Problem zu lösen, verwenden wir einen Zeigerempfängeransatz. Durch die Verwendung eines Zeigerempfängers werden Änderungen, die innerhalb der UnmarshalJSON-Methode vorgenommen werden, auf den ursprünglichen Wert übertragen. Hier ist ein Beispiel der geänderten UnmarshalJSON-Implementierung:

func (intValue *PersonID) UnmarshalJSON(data []byte) error {
  var s string
  if err := json.Unmarshal(data, &s); err != nil {
    return err
  }
  *intValue = Lookup(s)
  return nil
}

In dieser Implementierung wird JSON-Text in eine Zeichenfolgenvariable entmarshallt, bevor er an die Lookup-Funktion übergeben wird, die die Zeichenfolge in den gewünschten PersonID-Wert konvertiert. Dieser Wert wird dann dem Zeiger intValue zugewiesen.

Um Konflikte zwischen den JSON-Tags und den JSON-Daten zu vermeiden, stellen Sie außerdem sicher, dass die Tags in der MyType-Struktur mit den Feldnamen im JSON übereinstimmen. Durch Befolgen dieser Schritte können Sie UnmarshalJSON für abgeleitete Skalartypen erfolgreich implementieren.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3