【问题标题】:How to iterate an array in an interface{}?如何在 interface{} 中迭代数组?
【发布时间】:2018-09-24 12:52:04
【问题描述】:

我有一张地图

myMap := make(map[string]interface{})

其中一个地图元素是 []map[string]string 的数组

myMap["element"] = []map[string]string

如何迭代这个数组?

【问题讨论】:

  • 从该元素中键入 assert []map[string]string,您可以对其进行循环。

标签: arrays loops dictionary go


【解决方案1】:

您不能迭代 interface{} 类型的值,这是您从映射中的任何键查找返回的类型(因为它的类型为 map[string]interface{})。

您应该使用type assertion 来获取该类型的值,然后您可以在其范围内。

myElt := myMap["element"]
v, ok := myElt.([]map[string]string)
if !ok {
    // TODO: Handle the error
}

for i, item := range v {
    // TODO: do something with each map[string]string item in the slice
}

这是一个working playground example,为这些地图类型使用了人为的设置。


如果您知道该值是指定的切片类型,则可以省略类型断言中的ok 检查。如果您正在使用其他人的通用映射实现(具有interface{} 类型的键)并且知道您只使用[]map[string]string 类型的值填充它,则可能会出现这种情况。但是,请注意:如果您从地图中获得了 not 的这种类型的值,并且您忽略了检查,您的程序将会崩溃。

【讨论】:

    猜你喜欢
    • 2018-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-26
    • 2011-01-31
    • 2015-09-24
    • 1970-01-01
    相关资源
    最近更新 更多