Heim > Artikel > Backend-Entwicklung > Wann gibt „json.Marshal“ einen Non-Panic-Fehler zurück?
json.Marshal-Fehlerbehandlung: Eingabeinduzierte Fehler verstehen
Die json.Marshal-Funktion kann, wie in der Dokumentation hervorgehoben, zyklische Fehler nicht verarbeiten Datenstrukturen, was zu Laufzeitpaniken führt. Obwohl dies ein häufiges Szenario ist, können Situationen auftreten, in denen stattdessen ein Nicht-Panik-Fehler generiert wird.
Eingabe verursacht Fehlergenerierung
Zur Veranschaulichung eines Nicht-Panikfehlers Betrachten Sie im Panikszenario das folgende Beispiel:
<code class="go">type Node struct { Value int Next *Node } func main() { node1 := Node{1, nil} node2 := Node{2, &node1} node1.Next = &node2 _, err := json.Marshal(node1) if err != nil { fmt.Printf("Error encountered: %v\n", err) } }</code>
Ergebnis:
Das obige Programm wird ohne Panik ausgeführt und gibt stattdessen den Fehler zurück: json: nicht unterstützter Typ: * main.Node
Fehlertypen
Die json.Marshal-Funktion kann zwei Arten von Fehlern generieren:
Im angegebenen Beispiel fällt der Fehler in die Kategorie „UnsupportedValueError“, da er sich auf einen ungültigen Wert (zyklische Datenstruktur) und nicht auf einen ungültigen Typ bezieht.
Weitere Beispiele:
Hier sind einige zusätzliche Szenarien, die dazu führen können, dass json.Marshal Fehler ungleich Null zurückgibt:
<code class="go">_, err := json.Marshal(nil) // Error: json: unsupported value: nil _, err := json.Marshal(1e100) // Error: json: unsupported value: 1e+100, must be finite</code>
Das obige ist der detaillierte Inhalt vonWann gibt „json.Marshal“ einen Non-Panic-Fehler zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!