Go で「無効な操作: タイプ インターフェイス {} はインデックス作成をサポートしていません」エラーを処理する方法?

DDD
リリース: 2024-10-26 09:48:29
オリジナル
777 人が閲覧しました

How to Handle

インターフェイス インターフェイスのインデックス作成: インターフェイス {} のアドレス指定エラー

ネストされた JSON 応答を操作するときに、「無効です」というエラーが発生することは珍しくありません。操作: タイプ インターフェイス {} はインデックス作成をサポートしていません。」これは、インターフェイスの型付き変数のネストされた値にアクセスしようとしたときに、正しい型アサーションが適用されないときに発生します。

提供されたもののような JSON 応答を想定して、次の例を考えてみましょう。

<code class="go">var d interface{}
json.NewDecoder(response.Body).Decode(&d)
test := d["data"].(map[string]interface{})["type"]</code>
ログイン後にコピー

「type」値にアクセスしようとしている行は、d が配列のようなインデックス付けをサポートしていない typeinterface{} であるため、インデックス付けエラーをスローします。これを解決するには、assert d を適切な型に入力する必要があります。この場合、map[string]interface{}:

<code class="go">test := d.(map[string]interface{})["data"].(map[string]interface{})["type"]</code>
ログイン後にコピー

このネストされた型アサーションにより、「type」値にアクセスできるようになります。

あるいは、最初から d の型を map[string]interface{} として指定することもできます。

<code class="go">var d map[string]interface{}
json.NewDecoder(response.Body).Decode(&d)
test := d["data"].(map[string]interface{})["type"]</code>
ログイン後にコピー

d を map[string]interface として宣言することで{} 、最初の型アサーションは冗長です。

さらに、同様の操作を繰り返し実行する場合は、動的オブジェクトの操作を容易にするために github.com/icza/dyno ライブラリの使用を検討してください。

以上がGo で「無効な操作: タイプ インターフェイス {} はインデックス作成をサポートしていません」エラーを処理する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!