.. | ||
codes | ||
CHANGELOG.md | ||
decode.go | ||
decode_map.go | ||
decode_number.go | ||
decode_query.go | ||
decode_slice.go | ||
decode_string.go | ||
decode_value.go | ||
encode.go | ||
encode_map.go | ||
encode_number.go | ||
encode_slice.go | ||
encode_value.go | ||
ext.go | ||
LICENSE | ||
Makefile | ||
msgpack.go | ||
README.md | ||
tag.go | ||
time.go | ||
types.go |
MessagePack encoding for Golang
Supports:
- Primitives, arrays, maps, structs, time.Time and interface{}.
- Appengine *datastore.Key and datastore.Cursor.
- CustomEncoder/CustomDecoder interfaces for custom encoding.
- Extensions to encode type information.
- Renaming fields via
msgpack:"my_field_name"
. - Omitting individual empty fields via
msgpack:",omitempty"
tag or all empty fields in a struct. - Map keys sorting.
- Encoding/decoding all structs as arrays or individual structs.
- Encoder.UseJSONTag with Decoder.UseJSONTag can turn msgpack into drop-in replacement for JSON.
- Simple but very fast and efficient queries.
API docs: https://godoc.org/github.com/vmihailenco/msgpack. Examples: https://godoc.org/github.com/vmihailenco/msgpack#pkg-examples.
Installation
Install:
go get -u github.com/vmihailenco/msgpack
Quickstart
func ExampleMarshal() {
type Item struct {
Foo string
}
b, err := msgpack.Marshal(&Item{Foo: "bar"})
if err != nil {
panic(err)
}
var item Item
err = msgpack.Unmarshal(b, &item)
if err != nil {
panic(err)
}
fmt.Println(item.Foo)
// Output: bar
}
Benchmark
BenchmarkStructVmihailencoMsgpack-4 200000 12814 ns/op 2128 B/op 26 allocs/op
BenchmarkStructUgorjiGoMsgpack-4 100000 17678 ns/op 3616 B/op 70 allocs/op
BenchmarkStructUgorjiGoCodec-4 100000 19053 ns/op 7346 B/op 23 allocs/op
BenchmarkStructJSON-4 20000 69438 ns/op 7864 B/op 26 allocs/op
BenchmarkStructGOB-4 10000 104331 ns/op 14664 B/op 278 allocs/op
Howto
Please go through examples to get an idea how to use this package.