Go での埋め込み構造体のアンマーシャリング
この記事では、JSON データを埋め込み構造体を含む構造体にアンマーシャリングする問題について説明します。提供された例では、内部構造体が外部構造体に埋め込まれており、内部構造体のデフォルトの UnmarshalJSON メソッドが呼び出され、Data フィールドのみが設定され、Outer の Num フィールドは空のままであることがわかります。
理由この動作は Go の組み込み構造体メカニズムにあるためです。埋め込まれた構造体がアンマーシャリングされると、アンマーシャリング プロセスは埋め込まれた構造体を直接ターゲットにし、外部構造体のフィールドを無視します。
これに対処するために、よりシンプルで効率的な解決策が提案されています。それは、内部構造体を明示的なフィールドにすることです。
Inner をフィールドとして明示的に宣言することで、Outer struct の UnmarshalJSON メソッドが全体を使用して呼び出されます。 JSONデータ。このメソッド内では、埋め込まれた Inner 構造体の UnmarshalJSON メソッドを使用して Inner の Data フィールドに値を設定でき、Num フィールドには個別に値を設定できます。このアプローチにより、アンマーシャリング中に外部構造体の両方のフィールドが適切に設定されることが保証されます。
ソリューションを説明するための実際の例を次に示します。
<code class="go">type Outer struct { I Inner // Inner as explicit field Num int `json:"Num"` }</code>
以上がGo で埋め込み構造体をアンマーシャルするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。