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)
}
如果你想用地图做些不同的事情,我想请你澄清一下