134 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			134 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|  | # YAML support for the Go language
 | ||
|  | 
 | ||
|  | Introduction | ||
|  | ------------ | ||
|  | 
 | ||
|  | The yaml package enables Go programs to comfortably encode and decode YAML | ||
|  | values. It was developed within [Canonical](https://www.canonical.com) as | ||
|  | part of the [juju](https://juju.ubuntu.com) project, and is based on a | ||
|  | pure Go port of the well-known [libyaml](http://pyyaml.org/wiki/LibYAML) | ||
|  | C library to parse and generate YAML data quickly and reliably. | ||
|  | 
 | ||
|  | Compatibility | ||
|  | ------------- | ||
|  | 
 | ||
|  | The yaml package supports most of YAML 1.1 and 1.2, including support for | ||
|  | anchors, tags, map merging, etc. Multi-document unmarshalling is not yet | ||
|  | implemented, and base-60 floats from YAML 1.1 are purposefully not | ||
|  | supported since they're a poor design and are gone in YAML 1.2. | ||
|  | 
 | ||
|  | Installation and usage | ||
|  | ---------------------- | ||
|  | 
 | ||
|  | The import path for the package is *gopkg.in/yaml.v2*. | ||
|  | 
 | ||
|  | To install it, run: | ||
|  | 
 | ||
|  |     go get gopkg.in/yaml.v2 | ||
|  | 
 | ||
|  | API documentation | ||
|  | ----------------- | ||
|  | 
 | ||
|  | If opened in a browser, the import path itself leads to the API documentation: | ||
|  | 
 | ||
|  |   * [https://gopkg.in/yaml.v2](https://gopkg.in/yaml.v2) | ||
|  | 
 | ||
|  | API stability | ||
|  | ------------- | ||
|  | 
 | ||
|  | The package API for yaml v2 will remain stable as described in [gopkg.in](https://gopkg.in). | ||
|  | 
 | ||
|  | 
 | ||
|  | License | ||
|  | ------- | ||
|  | 
 | ||
|  | The yaml package is licensed under the Apache License 2.0. Please see the LICENSE file for details. | ||
|  | 
 | ||
|  | 
 | ||
|  | Example | ||
|  | ------- | ||
|  | 
 | ||
|  | ```Go | ||
|  | package main | ||
|  | 
 | ||
|  | import ( | ||
|  |         "fmt" | ||
|  |         "log" | ||
|  | 
 | ||
|  |         "gopkg.in/yaml.v2" | ||
|  | ) | ||
|  | 
 | ||
|  | var data = ` | ||
|  | a: Easy! | ||
|  | b: | ||
|  |   c: 2 | ||
|  |   d: [3, 4] | ||
|  | ` | ||
|  | 
 | ||
|  | // Note: struct fields must be public in order for unmarshal to | ||
|  | // correctly populate the data. | ||
|  | type T struct { | ||
|  |         A string | ||
|  |         B struct { | ||
|  |                 RenamedC int   `yaml:"c"` | ||
|  |                 D        []int `yaml:",flow"` | ||
|  |         } | ||
|  | } | ||
|  | 
 | ||
|  | func main() { | ||
|  |         t := T{} | ||
|  |      | ||
|  |         err := yaml.Unmarshal([]byte(data), &t) | ||
|  |         if err != nil { | ||
|  |                 log.Fatalf("error: %v", err) | ||
|  |         } | ||
|  |         fmt.Printf("--- t:\n%v\n\n", t) | ||
|  |      | ||
|  |         d, err := yaml.Marshal(&t) | ||
|  |         if err != nil { | ||
|  |                 log.Fatalf("error: %v", err) | ||
|  |         } | ||
|  |         fmt.Printf("--- t dump:\n%s\n\n", string(d)) | ||
|  |      | ||
|  |         m := make(map[interface{}]interface{}) | ||
|  |      | ||
|  |         err = yaml.Unmarshal([]byte(data), &m) | ||
|  |         if err != nil { | ||
|  |                 log.Fatalf("error: %v", err) | ||
|  |         } | ||
|  |         fmt.Printf("--- m:\n%v\n\n", m) | ||
|  |      | ||
|  |         d, err = yaml.Marshal(&m) | ||
|  |         if err != nil { | ||
|  |                 log.Fatalf("error: %v", err) | ||
|  |         } | ||
|  |         fmt.Printf("--- m dump:\n%s\n\n", string(d)) | ||
|  | } | ||
|  | ``` | ||
|  | 
 | ||
|  | This example will generate the following output: | ||
|  | 
 | ||
|  | ``` | ||
|  | --- t: | ||
|  | {Easy! {2 [3 4]}} | ||
|  | 
 | ||
|  | --- t dump: | ||
|  | a: Easy! | ||
|  | b: | ||
|  |   c: 2 | ||
|  |   d: [3, 4] | ||
|  | 
 | ||
|  | 
 | ||
|  | --- m: | ||
|  | map[a:Easy! b:map[c:2 d:[3 4]]] | ||
|  | 
 | ||
|  | --- m dump: | ||
|  | a: Easy! | ||
|  | b: | ||
|  |   c: 2 | ||
|  |   d: | ||
|  |   - 3 | ||
|  |   - 4 | ||
|  | ``` | ||
|  | 
 |