Go の標準 json.Marshal 関数は、Go データ構造を JSON 文字列に変換するように設計されています。ただし、処理できるデータ構造のタイプには特定の制限があることに注意することが重要です。
そのような制限の 1 つは、json.Marshal が循環データ構造を表現できないことです。 。これを試みると無限再帰が発生し、最終的にはランタイム パニックが発生します。
この意図しない動作を回避するために、json.Marshal は識別して報告するメカニズムを実装しています。潜在的に問題のある入力。チャネルなどの無効なタイプが指定された場合、json.UnsupportedTypeError のインスタンスが返されます。
例:
<code class="go">_, err := json.Marshal(make(chan int)) _, ok := err.(*json.UnsupportedTypeError) // ok == true</code>
さらに、json.Marshal は無効なデータを検出して報告できます。正または負の無限大などの値。このような場合、json.UnsupportedValueError のインスタンスが返されます。
例を示します:
<code class="go">_, err := json.Marshal(math.Inf(1)) _, ok := err.(*json.UnsupportedValueError) // ok == true</code>
入力の型と値を認識することで、 json.Marshal がエラーを返す可能性があるため、実行時のパニックを回避し、コードの堅牢性と信頼性を確保できます。
以上がGo で json.Marshal を使用するときにパニック以外のエラーを処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。