Go で json.Marshal 関数を使用する場合、エラーを引き起こす可能性のある入力データを考慮することが重要です。公式ドキュメントで述べられているように、循環データ構造はサポートされておらず、それらをマーシャリングしようとすると無限再帰が発生し、最終的には実行時パニックが発生します。
パニックではないエラー状態を示すために、次のようなプログラムを作成しましょう。 json.Marshal が返す可能性のある 2 種類のエラー: UnsupportedTypeError と 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>
出力:
UnsupportedTypeError: chan int UnsupportedValueError: +Inf
特定の入力を提供することで、このプログラムは json.Marshal が返すことができることを示します。パニックを引き起こすことなく、非 nil エラーが発生します。これにより、開発者はアプリケーション内でこれらのエラーを適切に処理できるようになります。
以上がGo で JSON マーシャル エラーを処理する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。