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

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

Nov 28, 2024 pm 05:06 PM

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 サイトの他の関連記事を参照してください。

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

ホットAIツール

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Stock Market GPT

Stock Market GPT

AIを活用した投資調査により賢明な意思決定を実現

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Golangの環境変数をどのように操作しますか? Golangの環境変数をどのように操作しますか? Aug 19, 2025 pm 02:06 PM

goprovides-built-built-insupportfor handlingenvironmentvariablesviatheospackage、developerstoread、set、andmanageenvironmentdatasecurelylelyandyly.toreadavariable、useos.getenv( "key")、whoreturnsenemptringtringifthesnoteset、lo

Goでパッケージとインポートを管理する方法は? Goでパッケージとインポートを管理する方法は? Sep 01, 2025 am 02:10 AM

usegomodulesbyrunninggomodinittucreateago.modfile、whithmanages -dependenciesandions.2.organizecodeIntopackagesは、Eachdirectoryisapackage where onsistentpackageName、できれば誘惑を抑制することができます

GOでジェネリックLRUキャッシュを実装する方法 GOでジェネリックLRUキャッシュを実装する方法 Aug 18, 2025 am 08:31 AM

Go GenericsとContainer/Listを使用して、スレッドセーフLRUキャッシュを実現します。 2。コアコンポーネントには、マップ、双方向リンクリスト、ミューテックスロックが含まれます。 3.操作を取得して追加し、O(1)の時間の複雑さを伴うロックを介して同時実行セキュリティを確保します。 4.キャッシュがいっぱいになると、最長の未使用のエントリが自動的に排除されます。 5。例では、容量が3のキャッシュが最も長く使用されていない「B」を正常に排除しました。この実装は、一般的で効率的でスケーラブルなものを完全にサポートします。

GOでカスタムビルドタグを作成する方法 GOでカスタムビルドタグを作成する方法 Aug 27, 2025 am 04:37 AM

custombuildtagsingoallowconditionalcompalilation basedoneNvironment、Architecture、orcustomscenariosbyusing // go:buildtagsattheTopoffiles、burtientenabledviagobuild-tags "tagname"、supportinglogicaloperatorslike && |

ゴーアウチンでパニックを処理する方法 ゴーアウチンでパニックを処理する方法 Aug 24, 2025 am 01:55 AM

TohandlepanicsingOroutines、使用済みのinsidetegoroutinetocatchandmanagetheThemlocally.2.を使用している

Apache Kafkaと一緒に行く方法 Apache Kafkaと一緒に行く方法 Aug 20, 2025 am 11:25 AM

Apachekafkaとgoと統合するための鍵は、適切なクライアントライブラリを選択し、プロデューサーと消費者を適切に構成することです。まず、Segmentio/Kafka-Goライブラリを使用することをお勧めします。それは簡潔であり、gogetgithub.com/segmentio/kafka-goをインストールした後、GO言語の習慣に適合しているため、ライターを作成してメッセージを送信し、AddR、トピック、バランサーポリシーを設定できます。次に、ブローカー、トピック、GroupIDを指定してメッセージの消費を実現するようにリーダーを構成し、消費者グループと手動パーティション割り当てをサポートします。コンテキストを使用してタイムアウトを制御し、TLS/SASLにセキュリティを確保できるようにし、

goで[] intを[] uint8(byte array)に変換する方法 goで[] intを[] uint8(byte array)に変換する方法 Sep 01, 2025 am 08:15 AM

この記事では、[] intスライスをgoで[] uint8(byte array)に変換する方法について説明します。 GOのINTタイプのサイズがプラットフォーム関連(32ビットまたは64ビット)であることを考えると、記事は反射パッケージを使用してINTサイズを動的に取得し、エンコード/バイナリパッケージを組み合わせて効率的かつ安全にコンバージョンを組み合わせて、特定のコード例と開発者を提供するための開発者を提供するための特定のコードの例を提供する方法を詳しく説明します。

言語同時プログラミング:Sync.waitgroupの理解と使用 言語同時プログラミング:Sync.waitgroupの理解と使用 Aug 31, 2025 am 07:48 AM

Sync.WaitGroupは、GO言語で同時同期の重要な原始です。これにより、メインのゴルウチンがサブゴルチンのグループが実行されるのを待つことができます。カウンターメカニズムを通じて、ウェイトグループは、すべての同時タスクが完了し、プログラムが引き続き実行され、人種条件とリソースの漏れを効果的に回避し、堅牢な同時アプリケーションを構築するための重要なツールであることを保証できます。

See all articles