mapstructure 
mapstructure是一个Go库,用于将通用的map值解码为结构,反之亦然,同时提供有用的错误处理。
这个库在从一些数据流(JSON、Gob等)中解码数值时最有用,因为在读取一部分数据之前,你并不十分清楚底层数据的结构。因此,你可以读取一个map[string]interface{} ,并使用这个库将其解码为适当的底层Go结构。
安装
标准go get :
$ go get github.com/mitchellh/mapstructure
使用方法和实例
关于用法和例子,请看Godoc。
Decode 函数在那里有相关的例子。
但是为什么呢?
Go为解码JSON等格式提供了出色的标准库。标准方法是预先创建一个结构,然后从编码格式的字节中填充该结构。这很好,但问题是,如果你有配置或编码,根据特定的字段而略有变化。例如,考虑这个JSON:
{
"type": "person",
"name": "Mitchell"
}
也许我们不能在不首先从JSON中读取 "类型 "字段的情况下填充一个特定的结构。我们总是可以对JSON进行两次解码(首先读取 "类型",然后再读取其他部分)。然而,更简单的做法是将其解码成一个map[string]interface{} 结构,读取 "类型 "键,然后使用类似这个库的东西将其解码成适当的结构。