首页 > 后端开发 > Golang > 如何处理Go中的'无效操作:类型接口{}不支持索引”错误?

如何处理Go中的'无效操作:类型接口{}不支持索引”错误?

DDD
发布: 2024-10-26 09:48:29
原创
884 人浏览过

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 的类型为 interface{},不支持类似数组的索引。为了解决这个问题,我们需要将断言 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板