ホームページ >バックエンド開発 >Golang >Go で JSON を埋め込み構造体にアンマーシャリングするときに「Num」フィールドが無視されるのはなぜですか?

Go で JSON を埋め込み構造体にアンマーシャリングするときに「Num」フィールドが無視されるのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-04 15:03:42257ブラウズ

Why is my `Num` field ignored when unmarshalling JSON to an embedded struct in Go?

Go の埋め込み構造への JSON のアンマーシャリング

JSON データの埋め込み構造への逆シリアル化は、Golang で課題となる可能性があります。 struct の例を見てみましょう:

<code class="go">type Outer struct {
    Inner
    Num int
}

type Inner struct {
    Data string
}</code>

json.Unmarshal(data, &Outer{}) を使用すると、Num フィールドは無視され、Inner フィールドのみがアンマーシャリングされます。この問題が発生する理由を理解するには、Inner が アウター に埋め込まれていることに注意することが重要です。

JSON のアンマーシャリング中、ライブラリはアウターのアンマーシャラーを呼び出し、次にインナーのアンマーシャラーを呼び出します。その結果、Inner.UnmarshalJSON 関数は JSON 文字列全体を受け取り、Inner のみで処理します。

この問題を解決するには、Inner を Outer の明示的なフィールドにします。これにより、JSON アンマーシャリング中に、内部フィールドが適切にアンマーシャリングされ、JSON データに基づいて Num フィールドが設定されることが保証されます。

<code class="go">Outer struct {
    I Inner // Make Inner an explicit field
    Num int `json:"Num"`
}</code>

この変更により、JSON データを外部構造体に正しくアンマーシャリングできるようになります。 Inner フィールドと Num フィールドの両方。

以上がGo で JSON を埋め込み構造体にアンマーシャリングするときに「Num」フィールドが無視されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。