Heim  >  Artikel  >  Backend-Entwicklung  >  Wann gibt „json.Marshal“ einen Non-Panic-Fehler zurück?

Wann gibt „json.Marshal“ einen Non-Panic-Fehler zurück?

Barbara Streisand
Barbara StreisandOriginal
2024-11-01 06:34:31184Durchsuche

When Does `json.Marshal` Return a Non-Panic Error?

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:

  • UnsupportedTypeError: Tritt auf, wenn ein ungültiger Typ übergeben wird, z. B. ein Kanal oder eine Funktion.
  • UnsupportedValueError: Wird ausgelöst, wenn ein ungültiger Wert bereitgestellt wird, z. B. Unendlich.

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!

Stellungnahme:
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