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

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

DDD
DDDオリジナル
2024-10-26 09:48:29881ブラウズ

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

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