如何在接口中迭代数组{}?

时间:2018-09-24 12:52:05

标签: arrays loops dictionary go

我有一张地图

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

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

的数组
myMap["element"] = []map[string]string

我怎样迭代这个数组?

1 个答案:

答案 0 :(得分:6)

您无法遍历类型为interface{}的值,该类型是您从映射中的任何键的查找中返回的类型(因为它的类型为map[string]interface{})。 / p>

您应该使用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 ,并且您忽略了检查,则程序将出现紧急情况。