スタック オーバーフローを引き起こさずに UnmarshalJSON 内で json.Unmarshal を呼び出す
問題:
UnmarshalJSON のカスタム実装json.Unmarshal を呼び出すとスタックが発生する可能性があります
解決策:
UnmarshalJSON 内で json.Unmarshal を呼び出すときにスタック オーバーフローの問題を回避するには、次の手法を利用します:
推論:
type キーワードを使用して新しい型を作成すると、元の型からすべてのメソッドが効果的に削除されます。アンマーシャリング プロセス中にラッパー タイプが使用される場合、JSON デコーダーはカスタム UnmarshalJSON 実装を見つけられず、デフォルトの実装を使用します。これにより、スタック オーバーフローの問題が回避されます。
例:
Age フィールドを持つ Person タイプを考えます:
type Person struct { Name string `json:"name"` Age int `json:"age"` } func (p *Person) UnmarshalJSON(data []byte) error { type personWrapper Person if err := json.Unmarshal(data, (*personWrapper)(p)); err != nil { return err } // Post-processing after unmarshaling: if p.Age < 0 { p.Age = 0 } return nil }
この手法により、カスタムアンマーシャリング後の後処理。同時に、json.Unmarshal 内での呼び出しに関連するスタック オーバーフローの問題を回避します。 UnmarshalJSON.
以上が「UnmarshalJSON」内で「json.Unmarshal」を呼び出すときにスタック オーバーフローを回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。