Thomas Boerger b6a95a8cb3 | 8 years ago | |
---|---|---|
.. | ||
0doc.go | 8 years ago | |
README.md | 8 years ago | |
binc.go | 8 years ago | |
cbor.go | 8 years ago | |
decode.go | 8 years ago | |
encode.go | 8 years ago | |
fast-path.generated.go | 8 years ago | |
fast-path.go.tmpl | 8 years ago | |
fast-path.not.go | 8 years ago | |
gen-dec-array.go.tmpl | 8 years ago | |
gen-dec-map.go.tmpl | 8 years ago | |
gen-helper.generated.go | 8 years ago | |
gen-helper.go.tmpl | 8 years ago | |
gen.generated.go | 8 years ago | |
gen.go | 8 years ago | |
gen_15.go | 8 years ago | |
gen_16.go | 8 years ago | |
helper.go | 8 years ago | |
helper_internal.go | 8 years ago | |
helper_not_unsafe.go | 8 years ago | |
helper_unsafe.go | 8 years ago | |
json.go | 8 years ago | |
msgpack.go | 8 years ago | |
noop.go | 8 years ago | |
prebuild.go | 8 years ago | |
prebuild.sh | 8 years ago | |
rpc.go | 8 years ago | |
simple.go | 8 years ago | |
test-cbor-goldens.json | 8 years ago | |
test.py | 8 years ago | |
tests.sh | 8 years ago | |
time.go | 8 years ago |
High Performance, Feature-Rich Idiomatic Go codec/encoding library for binc, msgpack, cbor, json.
Supported Serialization formats are:
To install:
go get github.com/ugorji/go/codec
This package understands the unsafe
tag, to allow using unsafe semantics:
unsafe
will bypass the allocation and copying overhead of []byte->string
conversion.To use it, you must pass the unsafe
tag during install:
go install -tags=unsafe github.com/ugorji/go/codec
Online documentation: http://godoc.org/github.com/ugorji/go/codec
Detailed Usage/How-to Primer: http://ugorji.net/blog/go-codec-primer
The idiomatic Go support is as seen in other encoding packages in the standard library (ie json, xml, gob, etc).
Rich Feature Set includes:
json:
key in struct tag supported.Users can register a function to handle the encoding or decoding of their custom types.
There are no restrictions on what the custom type can be. Some examples:
type BisSet []int
type BitSet64 uint64
type UUID string
type MyStructWithUnexportedFields struct { a int; b bool; c []int; }
type GifImage struct { ... }
As an illustration, MyStructWithUnexportedFields would normally be encoded as an empty map because it has no exported fields, while UUID would be encoded as a string. However, with extension support, you can encode any of these however you like.
RPC Client and Server Codecs are implemented, so the codecs can be used with the standard net/rpc package.
Typical usage model:
// create and configure Handle
var (
bh codec.BincHandle
mh codec.MsgpackHandle
ch codec.CborHandle
)
mh.MapType = reflect.TypeOf(map[string]interface{}(nil))
// configure extensions
// e.g. for msgpack, define functions and enable Time support for tag 1
// mh.SetExt(reflect.TypeOf(time.Time{}), 1, myExt)
// create and use decoder/encoder
var (
r io.Reader
w io.Writer
b []byte
h = &bh // or mh to use msgpack
)
dec = codec.NewDecoder(r, h)
dec = codec.NewDecoderBytes(b, h)
err = dec.Decode(&v)
enc = codec.NewEncoder(w, h)
enc = codec.NewEncoderBytes(&b, h)
err = enc.Encode(v)
//RPC Server
go func() {
for {
conn, err := listener.Accept()
rpcCodec := codec.GoRpc.ServerCodec(conn, h)
//OR rpcCodec := codec.MsgpackSpecRpc.ServerCodec(conn, h)
rpc.ServeCodec(rpcCodec)
}
}()
//RPC Communication (client side)
conn, err = net.Dial("tcp", "localhost:5555")
rpcCodec := codec.GoRpc.ClientCodec(conn, h)
//OR rpcCodec := codec.MsgpackSpecRpc.ClientCodec(conn, h)
client := rpc.NewClientWithCodec(rpcCodec)