“左侧的非接口类型映射 [字符串] 接口 {}”错误

我有一个结构:


 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结构类型。


我收到以下错误:


无效类型断言:list.(map[string])(左侧的非接口类型 map[string]interface {})


编辑:我真正需要做的是调用一个函数:


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


}


lists := a.Lists

for _, list:= range lists{

    list = WriteMapper(list)

}

但这给出了另一个错误:


不能在赋值中使用 WriteMapper(list) (type interface {}) 作为 type map[string]interface {}:需要类型断言


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


MMTTMM
浏览 425回答 1
1回答

慕工程0101907

在您的代码中,a.Lists(因此也是lists)是 a []map[string]interface{},一片地图。然后,您将迭代该切片,并将每次迭代的值分配给变量list(这有点奇怪,因为它持有 a map,但这是一个单独的问题)。现在,list是类型map[string]interface{}。您无需对其进行类型断言,因为它已经是那种类型了!要按list原样使用map[string]interface{},只需使用它:for _, list := range lists {    someValue := list["some-key"]    fmt.Println(someValue)}如果您尝试做一些与仅使用地图不同的事情,我会要求您澄清一下。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go