Heim > Backend-Entwicklung > Golang > Wie verhindert man einen Stapelüberlauf in Gos „UnmarshalJSON'?

Wie verhindert man einen Stapelüberlauf in Gos „UnmarshalJSON'?

Barbara Streisand
Freigeben: 2024-12-30 19:02:18
Original
362 Leute haben es durchsucht

How to Prevent Stack Overflow in Go's `UnmarshalJSON`?

Verhindern eines Stapelüberlaufs in UnmarshalJSON durch Abfangen des Unmarshal-Aufrufs

Im Kontext benutzerdefinierter UnmarshalJSON-Implementierungen kann es erforderlich sein, zusätzliche Schritte auszuführen während der Initialisierung der Datenstruktur. Der Aufruf von json.Unmarshal() innerhalb von UnmarshalJSON kann jedoch zu einem Stapelüberlauf führen, da der JSON-Decoder wiederholt nach einer benutzerdefinierten Implementierung sucht, was zu einer unendlichen Rekursion führt.

Um dieses Problem zu vermeiden, kann die zugrunde liegende Standardimplementierung aufgerufen werden ohne die rekursive Schleife auszulösen. So geht's:

  1. Erstellen Sie einen Zwischentyp mit dem Schlüsselwort „Type“:

    • Definieren Sie einen neuen Typ mit dem Schlüsselwort „type“, z Typ Person2 Person.
  2. Typkonvertierung und Zuweisung:

    • Typkonvertierung nutzen, um den ursprünglichen Wert dem neuen Typ zuzuweisen, z. B. (*person2)(p). Dadurch wird ein Wert des neuen Typs erstellt, ohne Methoden vom zugrunde liegenden Typ zu erben.
  3. Standard-Unmarshal-Funktion aufrufen:

    • Rufen Sie json.Unmarshal mit dem neuen Typ auf, wodurch die Standardeinstellung aufgerufen wird Implementierung.
  4. Nachbearbeitung (optional):

    • Führen Sie nach dem standardmäßigen Unmarshaling alle erforderlichen Nachbearbeitungen durch. wie von der benutzerdefinierten Logik gefordert.

Indem Sie dies verwenden Bei dieser Technik wird die rekursive Schleife unterbrochen, da für den neuen Typ die UnmarshalJSON-Methode nicht definiert ist. Dies verhindert einen Stapelüberlauf und ermöglicht eine nahtlose Initialisierung mit zusätzlicher Verarbeitung.

Das obige ist der detaillierte Inhalt vonWie verhindert man einen Stapelüberlauf in Gos „UnmarshalJSON'?. 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