ホームページ > バックエンド開発 > Golang > Go で「interface{}」を使用するときに JSON を具体的な構造体にアンマーシャリングする方法

Go で「interface{}」を使用するときに JSON を具体的な構造体にアンマーシャリングする方法

Linda Hamilton
リリース: 2024-11-28 17:06:17
オリジナル
349 人が閲覧しました

How to Unmarshal JSON into Concrete Structs in Go When Using `interface{}`?

JSON を具体的な構造体にアンマーシャリングする

複雑なデータ構造を扱う場合、多くの場合、JSON をインターフェースではなく具体的​​な構造体にアンマーシャリングする必要があります。 。ただし、json.Unmarshal のデフォルトの動作は、宛先がインターフェイスの場合に JSON データをマップに変換します。

問題の説明

提供された例では、 getFoo 関数は、具体的な Foo 構造体をラップするインターフェース値を返します。{}この値を指定して json.Unmarshal を呼び出すと、interface{} タイプだけではアンマーシャリングに十分な情報が提供されないため、基になる Foo 構造体を使用する代わりにマップが作成されます。

解決策: 明示的に渡す構造体参照

この問題を解決するには、具体的な構造体へのポインタを明示的に渡す必要があります。 json.アンマーシャル。これにより、デコーダが正しい構造体タイプを確実に識別できるようになります。

func getFoo() interface{} {
    return &Foo{"bar"}
}
ログイン後にコピー

構造体へのポインタを返すことにより、インターフェース ラッパーに具象タイプへの参照が含まれるようになり、json.Unmarshal がその構造体をアンマーシャリングできるようになります。{}データは正しくあります。

注:

です。この解決策は、コンパイル時に特定の構造体の型が不明な場合に適用されることに注意してください。構造体の型がわかっている場合は、型の安全性とパフォーマンスを向上させるために、それを json.Unmarshal に直接渡すことをお勧めします。

以上がGo で「interface{}」を使用するときに JSON を具体的な構造体にアンマーシャリングする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート