Go で「interface{}」を使用するときに JSON を具体的な構造体にアンマーシャリングする方法
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 サイトの他の関連記事を参照してください。

ホットAIツール

Undress AI Tool
脱衣画像を無料で

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

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

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック

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

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

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

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

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

Apachekafkaとgoと統合するための鍵は、適切なクライアントライブラリを選択し、プロデューサーと消費者を適切に構成することです。まず、Segmentio/Kafka-Goライブラリを使用することをお勧めします。それは簡潔であり、gogetgithub.com/segmentio/kafka-goをインストールした後、GO言語の習慣に適合しているため、ライターを作成してメッセージを送信し、AddR、トピック、バランサーポリシーを設定できます。次に、ブローカー、トピック、GroupIDを指定してメッセージの消費を実現するようにリーダーを構成し、消費者グループと手動パーティション割り当てをサポートします。コンテキストを使用してタイムアウトを制御し、TLS/SASLにセキュリティを確保できるようにし、
![goで[] intを[] uint8(byte array)に変換する方法](https://img.php.cn/upload/article/001/246/273/175668570227460.jpg?x-oss-process=image/resize,m_fill,h_207,w_330)
この記事では、[] intスライスをgoで[] uint8(byte array)に変換する方法について説明します。 GOのINTタイプのサイズがプラットフォーム関連(32ビットまたは64ビット)であることを考えると、記事は反射パッケージを使用してINTサイズを動的に取得し、エンコード/バイナリパッケージを組み合わせて効率的かつ安全にコンバージョンを組み合わせて、特定のコード例と開発者を提供するための開発者を提供するための特定のコードの例を提供する方法を詳しく説明します。

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