Skip to content
YAML support for the Go language.
Branch: v2
Clone or download
#4 Compare This branch is 7 commits ahead, 2 commits behind go-yaml:v2.
mikefarah Merge pull request #3 from udhos/v2
Name the module with import path used without modules.
Latest commit 70a6d23 Apr 7, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.travis.yml Enforce key uniqueness in strict mode Jan 8, 2018
LICENSE
LICENSE.libyaml Note in LICENSE.libyaml the specific files covered. Jul 17, 2014
NOTICE Create NOTICE Dec 12, 2017
README.md Remove mention of non-existent examples folder. Mar 26, 2018
apic.go Fixed typos in docstrings (go-yaml#179). Mar 26, 2018
decode.go Allow the DefaultMapType to be overridden Jun 13, 2018
decode_test.go Drop unnecessary explicit timestamp tags. Mar 26, 2018
emitterc.go Fixed typos in docstrings (go-yaml#179). Mar 26, 2018
encode.go Use underlying float precision when formatting floats (go-yaml#353) Mar 28, 2018
encode_test.go Use underlying float precision when formatting floats (go-yaml#353) Mar 28, 2018
example_embedded_test.go gofmt Jan 4, 2018
go.mod Name the module with import path used without modules. Apr 5, 2019
go.sum Missing go.sum Apr 2, 2019
parserc.go Remove unreachable code to fix go vet (go-yaml#249) Apr 7, 2017
readerc.go Fix curious assumption from the original C reader. Mar 26, 2018
resolve.go Drop unnecessary explicit timestamp tags. Mar 26, 2018
scannerc.go Fix typo in tab error message (go-yaml#208). Mar 26, 2018
sorter.go Improve map stabilization logic. Mar 25, 2018
suite_test.go Add support for marshaling durations. Apr 11, 2014
writerc.go implement Encoder Jan 7, 2018
yaml.go Fix type on Marshal docs (go-yaml#206). Mar 26, 2018
yamlh.go Merge pull request go-yaml#306 from rogpeppe/014-encoder Jan 8, 2018
yamlprivateh.go goyaml is now yaml. Mar 5, 2014

README.md

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 as part of the juju project, and is based on a pure Go port of the well-known 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:

API stability

The package API for yaml v2 will remain stable as described in gopkg.in.

License

The yaml package is licensed under the Apache License 2.0. Please see the LICENSE file for details.

Example

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
You can’t perform that action at this time.