* Use vendored go-swagger * vendor go-swagger * revert un wanteed change * remove un-needed GO111MODULE * Update Makefile Co-Authored-By: techknowlogick <matti@mdranta.net>
		
			
				
	
	
		
			47 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Markdown
		
	
	
	
		
			Vendored
		
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Markdown
		
	
	
	
		
			Vendored
		
	
	
	
| # mapstructure [](https://godoc.org/github.com/mitchellh/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.
 |