package msgpack
import "github.com/vmihailenco/msgpack"
Example (DecodeMapStringString)¶
Code:
{
decodedMap := make(map[string]string)
buf := &bytes.Buffer{}
m := map[string]string{"foo1": "bar1", "foo2": "bar2", "foo3": "bar3"}
keys := []string{"foo1", "foo3", "foo2"}
encodedMap, err := encodeMap(m, keys...)
if err != nil {
panic(err)
}
_, err = buf.Write(encodedMap)
if err != nil {
panic(err)
}
decoder := msgpack.NewDecoder(buf)
n, err := decoder.DecodeMapLen()
if err != nil {
panic(err)
}
for i := 0; i < n; i++ {
key, err := decoder.DecodeString()
if err != nil {
panic(err)
}
value, err := decoder.DecodeString()
if err != nil {
panic(err)
}
decodedMap[key] = value
}
for _, key := range keys {
fmt.Printf("%#v: %#v, ", key, decodedMap[key])
}
// Output: "foo1": "bar1", "foo3": "bar3", "foo2": "bar2",
}
Output:
"foo1": "bar1", "foo3": "bar3", "foo2": "bar2",
Example (EncodeMapStringString)¶
Code:
{
buf := &bytes.Buffer{}
m := map[string]string{"foo1": "bar1", "foo2": "bar2", "foo3": "bar3"}
keys := []string{"foo1", "foo3"}
encodedMap, err := encodeMap(m, keys...)
if err != nil {
panic(err)
}
_, err = buf.Write(encodedMap)
if err != nil {
panic(err)
}
decoder := msgpack.NewDecoder(buf)
value, err := decoder.DecodeMap()
if err != nil {
panic(err)
}
decodedMapValue := value.(map[interface{}]interface{})
for _, key := range keys {
fmt.Printf("%#v: %#v, ", key, decodedMapValue[key])
}
// Output: "foo1": "bar1", "foo3": "bar3",
}
Output:
"foo1": "bar1", "foo3": "bar3",
Example (MapStringInterface)¶
Code:
{
in := map[string]interface{}{"foo": 1, "hello": "world"}
b, err := msgpack.Marshal(in)
if err != nil {
panic(err)
}
var out map[string]interface{}
err = msgpack.Unmarshal(b, &out)
if err != nil {
panic(err)
}
fmt.Println("foo =", out["foo"])
fmt.Println("hello =", out["hello"])
// Output:
// foo = 1
// hello = world
}
Output:
foo = 1 hello = world
Example (RecursiveMapStringInterface)¶
Code:
{
buf := new(bytes.Buffer)
enc := msgpack.NewEncoder(buf)
in := map[string]interface{}{"foo": map[string]interface{}{"hello": "world"}}
_ = enc.Encode(in)
dec := msgpack.NewDecoder(buf)
dec.DecodeMapFunc = func(d *msgpack.Decoder) (interface{}, error) {
n, err := d.DecodeMapLen()
if err != nil {
return nil, err
}
m := make(map[string]interface{}, n)
for i := 0; i < n; i++ {
mk, err := d.DecodeString()
if err != nil {
return nil, err
}
mv, err := d.DecodeInterface()
if err != nil {
return nil, err
}
m[mk] = mv
}
return m, nil
}
out, err := dec.DecodeInterface()
fmt.Printf("%v %#v\n", err, out)
// Output: <nil> map[string]interface {}{"foo":map[string]interface {}{"hello":"world"}}
}
Output:
<nil> map[string]interface {}{"foo":map[string]interface {}{"hello":"world"}}
Index ¶
- func Marshal(v ...interface{}) ([]byte, error)
- func Register(typ reflect.Type, enc encoderFunc, dec decoderFunc)
- func RegisterExt(id int8, value interface{})
- func Unmarshal(b []byte, v ...interface{}) error
- type CustomDecoder
- type CustomEncoder
- type Decoder
- func NewDecoder(r io.Reader) *Decoder
- func (d *Decoder) Decode(v ...interface{}) error
- func (d *Decoder) DecodeArrayLen() (int, error)
- func (d *Decoder) DecodeBool() (bool, error)
- func (d *Decoder) DecodeBytes() ([]byte, error)
- func (d *Decoder) DecodeBytesLen() (int, error)
- func (d *Decoder) DecodeFloat32() (float32, error)
- func (d *Decoder) DecodeFloat64() (float64, error)
- func (d *Decoder) DecodeInt() (int, error)
- func (d *Decoder) DecodeInt16() (int16, error)
- func (d *Decoder) DecodeInt32() (int32, error)
- func (d *Decoder) DecodeInt64() (int64, error)
- func (d *Decoder) DecodeInt8() (int8, error)
- func (d *Decoder) DecodeInterface() (interface{}, error)
- func (d *Decoder) DecodeMap() (interface{}, error)
- func (d *Decoder) DecodeMapLen() (int, error)
- func (d *Decoder) DecodeNil() error
- func (d *Decoder) DecodeSlice() ([]interface{}, error)
- func (d *Decoder) DecodeSliceLen() (int, error)
- func (d *Decoder) DecodeString() (string, error)
- func (d *Decoder) DecodeTime() (time.Time, error)
- func (d *Decoder) DecodeUint() (uint, error)
- func (d *Decoder) DecodeUint16() (uint16, error)
- func (d *Decoder) DecodeUint32() (uint32, error)
- func (d *Decoder) DecodeUint64() (uint64, error)
- func (d *Decoder) DecodeUint8() (uint8, error)
- func (d *Decoder) DecodeValue(v reflect.Value) error
- func (d *Decoder) PeekCode() (code byte, err error)
- func (d *Decoder) Query(query string) ([]interface{}, error)
- func (d *Decoder) Reset(r io.Reader) error
- func (d *Decoder) Skip() error
- type Encoder
- func NewEncoder(w io.Writer) *Encoder
- func (e *Encoder) Encode(v ...interface{}) error
- func (e *Encoder) EncodeArrayLen(l int) error
- func (e *Encoder) EncodeBool(value bool) error
- func (e *Encoder) EncodeBytes(v []byte) error
- func (e *Encoder) EncodeFloat32(n float32) error
- func (e *Encoder) EncodeFloat64(n float64) error
- func (e *Encoder) EncodeInt(v int) error
- func (e *Encoder) EncodeInt16(v int16) error
- func (e *Encoder) EncodeInt32(v int32) error
- func (e *Encoder) EncodeInt64(v int64) error
- func (e *Encoder) EncodeInt8(v int8) error
- func (e *Encoder) EncodeMapLen(l int) error
- func (e *Encoder) EncodeNil() error
- func (e *Encoder) EncodeSliceLen(l int) error
- func (e *Encoder) EncodeString(v string) error
- func (e *Encoder) EncodeTime(tm time.Time) error
- func (e *Encoder) EncodeUint(v uint) error
- func (e *Encoder) EncodeUint16(v uint16) error
- func (e *Encoder) EncodeUint32(v uint32) error
- func (e *Encoder) EncodeUint64(v uint64) error
- func (e *Encoder) EncodeUint8(v uint8) error
- func (e *Encoder) EncodeValue(v reflect.Value) error
- func (e *Encoder) SortMapKeys(v bool) *Encoder
- type Marshaler
- type Unmarshaler
Examples ¶
- package (DecodeMapStringString)
- package (EncodeMapStringString)
- package (MapStringInterface)
- package (RecursiveMapStringInterface)
- CustomEncoder
- Decoder.Query
- Marshal
- RegisterExt
Functions ¶
func Marshal ¶
Example¶
Code:
{
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
}
Output:
bar
func Register ¶
Register registers encoder and decoder functions for a type. In most cases you should prefer implementing CustomEncoder and CustomDecoder interfaces.
func RegisterExt ¶
func RegisterExt(id int8, value interface{})
RegisterExt records a type, identified by a value for that type,
under the provided id. That id will identify the concrete type of a value
sent or received as an interface variable. Only types that will be
transferred as implementations of interface values need to be registered.
Expecting to be used only during initialization, it panics if the mapping
between types and ids is not a bijection.
Code:
Output:Example¶
{
type Item struct {
S string
}
msgpack.RegisterExt(1, Item{})
b, err := msgpack.Marshal(&Item{S: "string"})
if err != nil {
panic(err)
}
var v interface{}
err = msgpack.Unmarshal(b, &v)
if err != nil {
panic(err)
}
fmt.Printf("%#v", v)
// Output: msgpack_test.Item{S:"string"}
}
msgpack_test.Item{S:"string"}
func Unmarshal ¶
Types ¶
type CustomDecoder ¶
type CustomEncoder ¶
Example¶
Code:play
package main import ( "fmt" "gopkg.in/vmihailenco/msgpack.v2" ) type customStruct struct { S string N int } var _ msgpack.CustomEncoder = (*customStruct)(nil) var _ msgpack.CustomDecoder = (*customStruct)(nil) func (s *customStruct) EncodeMsgpack(enc *msgpack.Encoder) error { return enc.Encode(s.S, s.N) } func (s *customStruct) DecodeMsgpack(dec *msgpack.Decoder) error { return dec.Decode(&s.S, &s.N) } func main() { b, err := msgpack.Marshal(&customStruct{S: "hello", N: 42}) if err != nil { panic(err) } var v customStruct err = msgpack.Unmarshal(b, &v) if err != nil { panic(err) } fmt.Printf("%#v", v) }
Output:
msgpack_test.customStruct{S:"hello", N:42}
type Decoder ¶
type Decoder struct { DecodeMapFunc func(*Decoder) (interface{}, error) // contains filtered or unexported fields }
func NewDecoder ¶
func (*Decoder) Decode ¶
func (*Decoder) DecodeArrayLen ¶
func (*Decoder) DecodeBool ¶
func (*Decoder) DecodeBytes ¶
func (*Decoder) DecodeBytesLen ¶
func (*Decoder) DecodeFloat32 ¶
func (*Decoder) DecodeFloat64 ¶
func (*Decoder) DecodeInt ¶
func (*Decoder) DecodeInt16 ¶
func (*Decoder) DecodeInt32 ¶
func (*Decoder) DecodeInt64 ¶
func (*Decoder) DecodeInt8 ¶
func (*Decoder) DecodeInterface ¶
DecodeInterface decodes value into interface. Possible value types are:
- nil,
- bool,
- int64 for negative numbers,
- uint64 for positive numbers,
- float32 and float64,
- string,
- slices of any of the above,
- maps of any of the above.
func (*Decoder) DecodeMap ¶
func (*Decoder) DecodeMapLen ¶
func (*Decoder) DecodeNil ¶
func (*Decoder) DecodeSlice ¶
func (*Decoder) DecodeSliceLen ¶
Deprecated. Use DecodeArrayLen instead.
func (*Decoder) DecodeString ¶
func (*Decoder) DecodeTime ¶
func (*Decoder) DecodeUint ¶
func (*Decoder) DecodeUint16 ¶
func (*Decoder) DecodeUint32 ¶
func (*Decoder) DecodeUint64 ¶
func (*Decoder) DecodeUint8 ¶
func (*Decoder) DecodeValue ¶
func (*Decoder) PeekCode ¶
peekCode returns the next Msgpack code. See https://github.com/msgpack/msgpack/blob/master/spec.md#formats for details.
func (*Decoder) Query ¶
Query extracts data specified by the query from the msgpack stream skipping
any other data. Query consists of map keys and array indexes separated with dot,
e.g. key1.0.key2.
Code:
Output:Example¶
{
b, err := msgpack.Marshal([]map[string]interface{}{
{"id": 1, "attrs": map[string]interface{}{"phone": 12345}},
{"id": 2, "attrs": map[string]interface{}{"phone": 54321}},
})
if err != nil {
panic(err)
}
dec := msgpack.NewDecoder(bytes.NewBuffer(b))
values, err := dec.Query("*.attrs.phone")
if err != nil {
panic(err)
}
fmt.Println("phones are", values)
dec.Reset(bytes.NewBuffer(b))
values, err = dec.Query("1.attrs.phone")
if err != nil {
panic(err)
}
fmt.Println("2nd phone is", values[0])
// Output: phones are [12345 54321]
// 2nd phone is 54321
}
phones are [12345 54321]
2nd phone is 54321
func (*Decoder) Reset ¶
func (*Decoder) Skip ¶
Skip skips next value.
type Encoder ¶
type Encoder struct {
// contains filtered or unexported fields
}
func NewEncoder ¶
func (*Encoder) Encode ¶
func (*Encoder) EncodeArrayLen ¶
func (*Encoder) EncodeBool ¶
func (*Encoder) EncodeBytes ¶
func (*Encoder) EncodeFloat32 ¶
func (*Encoder) EncodeFloat64 ¶
func (*Encoder) EncodeInt ¶
func (*Encoder) EncodeInt16 ¶
func (*Encoder) EncodeInt32 ¶
func (*Encoder) EncodeInt64 ¶
func (*Encoder) EncodeInt8 ¶
func (*Encoder) EncodeMapLen ¶
func (*Encoder) EncodeNil ¶
func (*Encoder) EncodeSliceLen ¶
Deprecated. Use EncodeArrayLen instead.
func (*Encoder) EncodeString ¶
func (*Encoder) EncodeTime ¶
func (*Encoder) EncodeUint ¶
func (*Encoder) EncodeUint16 ¶
func (*Encoder) EncodeUint32 ¶
func (*Encoder) EncodeUint64 ¶
func (*Encoder) EncodeUint8 ¶
func (*Encoder) EncodeValue ¶
func (*Encoder) SortMapKeys ¶
SortMapKeys causes the Encoder to encode map keys in increasing order. Supported map types are:
- map[string]string
- map[string]interface{}
type Marshaler ¶
Deprecated. Use CustomEncoder.
type Unmarshaler ¶
Deprecated. Use CustomDecoder.
Source Files ¶
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 msgpack.go tags.go time.go types.go
Directories ¶
Path | Synopsis |
---|---|
codes |
- Version
- v2.7.4+incompatible
- Published
- Nov 14, 2016
- Platform
- js/wasm
- Imports
- 14 packages
- Last checked
- now –
Tools for package owners.