我需要创建一个如下所示的地图:
package main
import "fmt"
func main() {
var data = map[string]interface{}{}
data["name"] = "User"
data["info"] = map[string]string{}
data["info"]["email"] = "user@mail.com"
fmt.Println(data)
}
我正在尝试创建嵌套地图,但是我收到错误,如下所示:
# command-line-arguments./interface.go:9: invalid operation: data["info"]["email"] (type interface {} does not support indexing)
请提供解决方法以修复此错误。提前谢谢。
答案 0 :(得分:3)
您的data
:
var data = map[string]interface{}{}
是从string
到interface{}
的地图,因此data["info"]
只是interface{}
,直到您将其类型声明为map[string]string
:
data["info"].(map[string]string) // Now you have a map[string]string
获得map[string]string
后,您可以根据需要对其进行索引:
data["info"].(map[string]string)["email"] = "user@mail.com"
答案 1 :(得分:0)
接口类型的变量存储一对:具体值 分配给变量,以及该值的类型描述符。更多 确切地说,值是底层的具体数据项 实现接口,类型描述了它的完整类型 项目
这就是为什么我们需要键入断言map[string]string
来获取map[string]interface{}
的基础值
您也可以查看此post
举个例子,你可以在他们有索引的地图上循环。但是接口就像存储值及其类型的类型T的包装器一样。正如错误所说,他们没有索引。