mirror of
https://github.com/opentffoundation/opentf.git
synced 2026-01-02 04:01:13 -05:00
* Remove `make updatedeps` from Travis build. We'll follow up with more specific plans around dependency updating in subsequent PRs. * Update all `make` targets to set `GO15VENDOREXPERIMENT=1` and to filter out `/vendor/` from `./...` where appropriate. * Temporarily remove `vet` from the `make test` target until we can figure out how to get it to not vet `vendor/`. (Initial experimentation failed to yield the proper incantation.) Everything is pinned to current master, with the exception of: * Azure/azure-sdk-for-go which is pinned before the breaking change today * aws/aws-sdk-go which is pinned to the most recent tag The documentation still needs to be updated, which we can do in a follow up PR. The goal here is to unblock release.
47 lines
1.5 KiB
Markdown
47 lines
1.5 KiB
Markdown
# mapstructure
|
|
|
|
mapstructure is a Go library for decoding generic map values to structures
|
|
and vice versa, while providing helpful error handling.
|
|
|
|
This library is most useful when decoding values from some data stream (JSON,
|
|
Gob, etc.) where you don't _quite_ know the structure of the underlying data
|
|
until you read a part of it. You can therefore read a `map[string]interface{}`
|
|
and use this library to decode it into the proper underlying native Go
|
|
structure.
|
|
|
|
## Installation
|
|
|
|
Standard `go get`:
|
|
|
|
```
|
|
$ go get github.com/mitchellh/mapstructure
|
|
```
|
|
|
|
## Usage & Example
|
|
|
|
For usage and examples see the [Godoc](http://godoc.org/github.com/mitchellh/mapstructure).
|
|
|
|
The `Decode` function has examples associated with it there.
|
|
|
|
## But Why?!
|
|
|
|
Go offers fantastic standard libraries for decoding formats such as JSON.
|
|
The standard method is to have a struct pre-created, and populate that struct
|
|
from the bytes of the encoded format. This is great, but the problem is if
|
|
you have configuration or an encoding that changes slightly depending on
|
|
specific fields. For example, consider this JSON:
|
|
|
|
```json
|
|
{
|
|
"type": "person",
|
|
"name": "Mitchell"
|
|
}
|
|
```
|
|
|
|
Perhaps we can't populate a specific structure without first reading
|
|
the "type" field from the JSON. We could always do two passes over the
|
|
decoding of the JSON (reading the "type" first, and the rest later).
|
|
However, it is much simpler to just decode this into a `map[string]interface{}`
|
|
structure, read the "type" key, then use something like this library
|
|
to decode it into the proper structure.
|