mitchellh/mapstructure
GitHub: mitchellh/mapstructure
一个 Go 库,用于在泛型 map 和原生 Go 结构体之间进行双向转换,特别适合数据结构不完全已知时的分阶段解码场景。
Stars: 8033 | Forks: 727
# mapstructure [](https://godoc.org/github.com/mitchellh/mapstructure)
mapstructure 是一个 Go 库,用于将泛型 map 值解码为结构体,
反之亦然,同时提供有用的错误处理。
当从某些数据流(JSON、
Gob 等)中解码值时,这个库最有用,因为在读取部分数据之前,你并不_完全_知道底层的数据
结构。因此,你可以读取 `map[string]interface{}`
并使用此库将其解码为合适的底层原生 Go
结构体。
## 安装说明
标准的 `go get`:
```
$ go get github.com/mitchellh/mapstructure
```
## 使用与示例
有关使用和示例,请参阅 [Godoc](http://godoc.org/github.com/mitchellh/mapstructure)。
`Decode` 函数在那里有相关的示例。
## 但这是为什么呢?!
Go 为解码 JSON 等格式提供了出色的标准库。
标准方法是预先创建一个 struct,然后从编码格式的字节填充该
struct。这很好,但问题是如果你有根据特定字段
而稍微变化的配置或编码。例如,考虑这个 JSON:
```
{
"type": "person",
"name": "Mitchell"
}
```
也许我们不先从 JSON 中读取
"type" 字段,就无法填充特定的结构体。我们总是可以对
JSON 的解码进行两次遍历(先读取 "type",之后再读取其余部分)。
然而,将其直接解码为 `map[string]interface{}`
结构体,读取 "type" 键,然后使用类似此库的工具
将其解码为正确的结构体,这样做要简单得多。
标签:EVTX分析, 日志审计