Go &引用;非接口类型映射[string]接口{}位于左侧";错误

Go &引用;非接口类型映射[string]接口{}位于左侧";错误,go,Go,我有一个结构: type ListsObj struct { Page string `json:"pages"` Count string `json:"count"` Lists []map[string]interface{} `json:"assets"` } 我正在尝试做如下事情: lists := a.Lists for _, list:= range lists{ li

我有一个结构:

 type ListsObj struct {
    Page   string                   `json:"pages"`
    Count  string                   `json:"count"`
    Lists []map[string]interface{} `json:"assets"`
}
我正在尝试做如下事情:

lists := a.Lists
for _, list:= range lists{
    listData := list.(map[string]interface {})
}
a
属于
ListsObj
struct类型

我遇到以下错误:

无效的类型断言:列表。(映射[字符串])(非接口类型 映射[字符串]接口(左侧{})

编辑: 我实际上需要做的是调用一个函数:

func WriteMapper(a interface {}) interface{}  {

}

lists := a.Lists
for _, list:= range lists{
    list = WriteMapper(list)
}
但这也带来了另一个错误:

无法将WriteMapper(list)(类型接口{})用作类型 赋值中的映射[string]接口{}:需要类型断言


编辑:我想我明白了。。。函数返回
interface
,我试图将其分配给
map[string]interface{}

在您的代码中,
a.Lists
(因此也是
Lists
)是一个
[]映射[string]interface{}
,一个映射片。然后在该切片上迭代,并将每次迭代的值分配给变量
列表
(该变量的名称有点奇怪,因为它包含一个
映射
,但这是一个单独的问题)

现在,
list
属于
map[string]接口{}
类型。您不需要在其中键入assert,因为它已经是那种类型了

要使用
list
作为
map[string]接口{}
,只需使用它:

for _, list := range lists {
    someValue := list["some-key"]
    fmt.Println(someValue)
}
如果你想用地图做些不同的事情,我想请你澄清一下