Heim > Backend-Entwicklung > Golang > 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?

Patricia Arquette
Freigeben: 2024-11-25 05:46:18
Original
407 Leute haben es durchsucht

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

Ableiten benutzerdefinierter Typen für JSON-Unmarshaling in Go

Beim Arbeiten mit benutzerdefinierten Typen in Go ist es häufig erforderlich, die UnmarshalJSON-Funktion zu implementieren, 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änger-Ansatz. 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 modifizierten 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
}
Nach dem Login kopieren

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. Indem Sie diese Schritte befolgen, können Sie UnmarshalJSON erfolgreich für abgeleitete Skalartypen implementieren.

Das obige ist der detaillierte Inhalt vonWie kann ich benutzerdefiniertes JSON-Unmarshaling für abgeleitete Skalartypen in Go implementieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage