mitchellh/mapstructure

GitHub: mitchellh/mapstructure

一个 Go 库,用于在泛型 map 和原生 Go 结构体之间进行双向转换,特别适合数据结构不完全已知时的分阶段解码场景。

Stars: 8033 | Forks: 727

# mapstructure [![Godoc](https://godoc.org/github.com/mitchellh/mapstructure?status.svg)](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分析, 日志审计