索引接口接口:寻址接口 {} 索引错误
使用嵌套 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中文网其他相关文章!