mirror of
				https://gitea.com/Lydanne/buildx.git
				synced 2025-11-04 18:13:42 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			47 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
# 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.
 |