golang中的嵌套地图创建

时间:2018-03-13 05:58:25

标签: go

我需要创建一个如下所示的地图:

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)

请提供解决方法以修复此错误。提前谢谢。

2 个答案:

答案 0 :(得分:3)

您的data

var data = map[string]interface{}{}

是从stringinterface{}的地图,因此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"  

https://play.golang.org/p/yuyAN9FRCxc

答案 1 :(得分:0)

根据Golang Laws of Reflection

  

接口类型的变量存储一对:具体值   分配给变量,以及该值的类型描述符。更多   确切地说,值是底层的具体数据项   实现接口,类型描述了它的完整类型   项目

这就是为什么我们需要键入断言map[string]string来获取map[string]interface{}的基础值

您也可以查看此post

举个例子,你可以在他们有索引的地图上循环。但是接口就像存储值及其类型的类型T的包装器一样。正如错误所说,他们没有索引。