goyaml
2813
Comment:
|
3086
|
Deletions are marked like this. | Additions are marked like this. |
Line 1: | Line 1: |
<<TableOfContents>> |
|
Line 13: | Line 15: |
== 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 (WTF), and multi-document unmarshalling. These features are not hard to add, and will be introduced as necessary. |
|
Line 17: | Line 26: |
http://goneat.org/pkg/goyaml | http://goneat.org/pkg/launchpad.net/goyaml |
Line 27: | Line 36: |
"goyaml" | "launchpad.net/goyaml" |
Line 40: | Line 49: |
B struct{C int; D []int "/f"} | B struct{C int; D []int ",flow"} |
Line 45: | Line 54: |
Line 47: | Line 57: |
panic(err.String()) | panic(err) |
Line 52: | Line 62: |
if err != nil { panic(err) } |
|
Line 58: | Line 71: |
panic(err.String()) | panic(err) |
Line 63: | Line 76: |
if err != nil { panic(err) } |
|
Line 107: | Line 123: |
Using goinstall doesn't yet work in this case because goyaml depends on cgo, so for now we'll simply go ahead and build it manually. First, grab the code from Launchpad: |
To make use of goyaml, just run the following command: |
Line 112: | Line 125: |
$ bzr branch lp:goyaml }}} Then, build and install it: {{{ $ make install |
$ goinstall launchpad.net/goyaml |
Contents
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 an experiment related to using the Go language with the Ensemble project.
goyaml internally uses the C libyaml library to parse and generate YAML data fast and reliably. It ships with all the necessary files, though, and has no external dependencies besides Go itself.
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 (WTF), 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 which connects to ZooKeeper, waits for the session to be established, and attempts to create a node:
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:
$ goinstall launchpad.net/goyaml
Running tests
To run tests, first install gocheck with:
$ goinstall launchpad.net/gocheck
Then run gotest as usual:
$ gotest
License
goyaml is licensed under the LGPL.
Contact
This project is being developed under the Ensemble project at Canonical.
To get in touch, send a message to the Ensemble mailing list at: <ensemble@lists.ubuntu.com>
goyaml (last edited 2014-12-09 23:25:57 by foka)