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

Mar*_*tin 0 arrays dictionary loops go

我有一张地图

myMap := make(map[string]interface{})
Run Code Online (Sandbox Code Playgroud)

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

myMap["element"] = []map[string]string
Run Code Online (Sandbox Code Playgroud)

我怎么能迭代这个数组?

Cos*_*age 6

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

您应该使用类型断言来获取该类型的值,然后您可以在该值上进行范围调整.

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
}
Run Code Online (Sandbox Code Playgroud)

这是一个使用这些地图类型的人为设置的工作游乐场示例.


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