Bei der Verwendung der json.Marshal-Funktion in Go ist es wichtig, Eingabedaten zu berücksichtigen, die einen Fehler auslösen können. Wie in der offiziellen Dokumentation erwähnt, werden zyklische Datenstrukturen nicht unterstützt und der Versuch, sie zu Marshallen, führt zu einer unendlichen Rekursion, was letztendlich zu einer Laufzeitpanik führt.
Um einen Nicht-Panik-Fehlerzustand zu demonstrieren, erstellen wir ein Programm, das zeigt zwei Arten von Fehlern, die json.Marshal zurückgeben kann: UnsupportedTypeError und UnsupportedValueError.
<code class="go">package main import ( "encoding/json" "fmt" "math" ) func main() { // UnsupportedTypeError: marshalling an invalid type (channel) ch := make(chan int) _, err := json.Marshal(ch) if e, ok := err.(*json.UnsupportedTypeError); ok { // Check for specific error type fmt.Println("UnsupportedTypeError:", e.Type) } else { fmt.Println("Error:", err) } // UnsupportedValueError: marshalling an invalid value (infinity) inf := math.Inf(1) _, err = json.Marshal(inf) if e, ok := err.(*json.UnsupportedValueError); ok { // Check for specific error type fmt.Println("UnsupportedValueError:", e.Value) } else { fmt.Println("Error:", err) } }</code>
Ausgabe:
UnsupportedTypeError: chan int UnsupportedValueError: +Inf
Durch die Bereitstellung spezifischer Eingaben zeigt dieses Programm, dass json.Marshal zurückkehren kann Nicht-Null-Fehler, ohne Panik auszulösen. Dadurch können Entwickler diese Fehler in ihren Anwendungen reibungslos behandeln.
Das obige ist der detaillierte Inhalt vonWie gehe ich mit JSON-Marshal-Fehlern in Go um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!