goyaml

Differences between revisions 13 and 14
Revision 13 as of 2013-05-29 17:42:35
Size: 2815
Editor: niemeyer
Comment:
Revision 14 as of 2013-05-29 17:43:18
Size: 2815
Editor: niemeyer
Comment:
Deletions are marked like this. Additions are marked like this.
Line 7: Line 7:
the well-known C [[http://pyyaml.org/wiki/LibYAML|libyaml]] library to parse and the well-known [[http://pyyaml.org/wiki/LibYAML|libyaml]] C library to parse and

What is it?

The goyaml package enables Go programs to very 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

goyaml is almost compatible with YAML 1.1, including support for anchors, tags, etc. There are still a few missing bits, such as document merging, base-60 floats (huh?), and multi-document unmarshalling. These features are not hard to add, and will be introduced as necessary.

API documentation

The API documentation is currently available at:

Example

Here is a simple example:

package main

import (
    "launchpad.net/goyaml"
    "fmt"
)

var data = `
a: Easy!
b:
  c: 2
  d: [3, 4]
`

type T struct {
    A string
    B struct{C int; D []int ",flow"}
}

func main() {
    t := T{}

    err := goyaml.Unmarshal([]byte(data), &t)
    if err != nil {
        panic(err)
    }
    fmt.Printf("--- t:\n%v\n\n", t)

    d, err := goyaml.Marshal(&t)
    if err != nil {
        panic(err)
    }
    fmt.Printf("--- t dump:\n%s\n\n", string(d))

    m := make(map[interface{}]interface{})

    err = goyaml.Unmarshal([]byte(data), &m)
    if err != nil {
        panic(err)
    }
    fmt.Printf("--- m:\n%v\n\n", m)

    d, err = goyaml.Marshal(&m)
    if err != nil {
        panic(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

Source code

To obtain the source code, use Bazaar to download it from Launchpad:

$ bzr branch lp:goyaml

Reporting bugs

Please report bugs at:

How to build and install goyaml

To make use of goyaml, just run the following command:

$ go get launchpad.net/goyaml

Running tests

To run tests, first install gocheck with:

$ go get launchpad.net/gocheck

Then run gotest as usual:

$ go test

License

goyaml is licensed under the LGPL.

Contact

This project is being developed under the juju project at Canonical.

To get in touch, send a message to the juju mailing list at: <juju-dev@lists.ubuntu.com>

goyaml (last edited 2014-12-09 23:25:57 by foka)