Documentation
ΒΆ
Index ΒΆ
- func Marshal(v interface{}) ([]byte, error)
- func PutDecoder(dec *Decoder)
- func PutEncoder(enc *Encoder)
- func Register(value interface{}, enc encoderFunc, dec decoderFunc)
- func RegisterExt(extID int8, value MarshalerUnmarshaler)
- func RegisterExtDecoder(extID int8, value interface{}, ...)
- func RegisterExtEncoder(extID int8, value interface{}, ...)
- func Unmarshal(data []byte, v interface{}) error
- func UnregisterExt(extID int8)
- func Version() string
- type CustomDecoder
- type CustomEncoder
- type Decoder
- func (d *Decoder) Buffered() io.Reader
- 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) DecodeDuration() (time.Duration, error)
- func (d *Decoder) DecodeExtHeader() (extID int8, extLen int, err error)
- func (d *Decoder) DecodeFloat32() (float32, error)
- func (d *Decoder) DecodeFloat64() (float64, error)
- func (d *Decoder) DecodeInt() (int, error)
- func (d *Decoder) DecodeInt8() (int8, error)
- func (d *Decoder) DecodeInt16() (int16, error)
- func (d *Decoder) DecodeInt32() (int32, error)
- func (d *Decoder) DecodeInt64() (int64, error)
- func (d *Decoder) DecodeInterface() (interface{}, error)
- func (d *Decoder) DecodeInterfaceLoose() (interface{}, error)
- func (d *Decoder) DecodeMap() (map[string]interface{}, error)
- func (d *Decoder) DecodeMapLen() (int, error)
- func (d *Decoder) DecodeMulti(v ...interface{}) error
- func (d *Decoder) DecodeNil() error
- func (d *Decoder) DecodeRaw() (RawMessage, error)
- func (d *Decoder) DecodeSlice() ([]interface{}, error)
- func (d *Decoder) DecodeString() (string, error)
- func (d *Decoder) DecodeTime() (time.Time, error)
- func (d *Decoder) DecodeTypedMap() (interface{}, error)
- func (d *Decoder) DecodeUint() (uint, error)
- func (d *Decoder) DecodeUint8() (uint8, error)
- func (d *Decoder) DecodeUint16() (uint16, error)
- func (d *Decoder) DecodeUint32() (uint32, error)
- func (d *Decoder) DecodeUint64() (uint64, error)
- func (d *Decoder) DecodeUntypedMap() (map[interface{}]interface{}, error)
- func (d *Decoder) DecodeValue(v reflect.Value) error
- func (d *Decoder) DisableAllocLimit(on bool)
- func (d *Decoder) DisallowUnknownFields(on bool)
- func (d *Decoder) PeekCode() (byte, error)
- func (d *Decoder) Query(query string) ([]interface{}, error)
- func (d *Decoder) ReadFull(buf []byte) error
- func (d *Decoder) Reset(r io.Reader)
- func (d *Decoder) ResetDict(r io.Reader, dict []string)
- func (d *Decoder) ResetReader(r io.Reader)
- func (d *Decoder) SetCustomStructTag(tag string)
- func (d *Decoder) SetMapDecoder(fn func(*Decoder) (interface{}, error))
- func (d *Decoder) Skip() error
- func (d *Decoder) UseInternedStrings(on bool)
- func (d *Decoder) UseLooseInterfaceDecoding(on bool)
- func (d *Decoder) UsePreallocateValues(on bool)
- func (d *Decoder) WithDict(dict []string, fn func(*Decoder) error) error
- type 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) EncodeBytesLen(l int) error
- func (e *Encoder) EncodeDuration(d time.Duration) error
- func (e *Encoder) EncodeExtHeader(extID int8, extLen int) error
- func (e *Encoder) EncodeFloat32(n float32) error
- func (e *Encoder) EncodeFloat64(n float64) error
- func (e *Encoder) EncodeInt(n int64) error
- func (e *Encoder) EncodeInt8(n int8) error
- func (e *Encoder) EncodeInt16(n int16) error
- func (e *Encoder) EncodeInt32(n int32) error
- func (e *Encoder) EncodeInt64(n int64) error
- func (e *Encoder) EncodeMap(m map[string]interface{}) error
- func (e *Encoder) EncodeMapLen(l int) error
- func (e *Encoder) EncodeMapSorted(m map[string]interface{}) error
- func (e *Encoder) EncodeMulti(v ...interface{}) error
- func (e *Encoder) EncodeNil() error
- func (e *Encoder) EncodeString(v string) error
- func (e *Encoder) EncodeTime(tm time.Time) error
- func (e *Encoder) EncodeUint(n uint64) error
- func (e *Encoder) EncodeUint8(n uint8) error
- func (e *Encoder) EncodeUint16(n uint16) error
- func (e *Encoder) EncodeUint32(n uint32) error
- func (e *Encoder) EncodeUint64(n uint64) error
- func (e *Encoder) EncodeValue(v reflect.Value) error
- func (e *Encoder) Reset(w io.Writer)
- func (e *Encoder) ResetDict(w io.Writer, dict map[string]int)
- func (e *Encoder) ResetWriter(w io.Writer)
- func (e *Encoder) SetCustomStructTag(tag string)
- func (e *Encoder) SetOmitEmpty(on bool)
- func (e *Encoder) SetSortMapKeys(on bool) *Encoder
- func (e *Encoder) UseArrayEncodedStructs(on bool)
- func (e *Encoder) UseCompactFloats(on bool)
- func (e *Encoder) UseCompactInts(on bool)
- func (e *Encoder) UseInternedStrings(on bool)
- func (e *Encoder) WithDict(dict map[string]int, fn func(*Encoder) error) error
- func (e *Encoder) Writer() io.Writer
- type Marshaler
- type MarshalerUnmarshaler
- type RawMessage
- type Unmarshaler
Examples ΒΆ
Constants ΒΆ
This section is empty.
Variables ΒΆ
This section is empty.
Functions ΒΆ
func Marshal ΒΆ
Marshal returns the MessagePack encoding of v.
Example ΒΆ
package main
import (
"fmt"
"github.com/vmihailenco/msgpack/v5"
)
func main() {
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
Example (AsArray) ΒΆ
package main
import (
"bytes"
"fmt"
"github.com/vmihailenco/msgpack/v5"
)
func main() {
type Item struct {
_msgpack struct{} `msgpack:",as_array"`
Foo string
Bar string
}
var buf bytes.Buffer
enc := msgpack.NewEncoder(&buf)
err := enc.Encode(&Item{Foo: "foo", Bar: "bar"})
if err != nil {
panic(err)
}
dec := msgpack.NewDecoder(&buf)
v, err := dec.DecodeInterface()
if err != nil {
panic(err)
}
fmt.Println(v)
}
Output: [foo bar]
Example (EscapedNames) ΒΆ
package main
import (
"fmt"
"github.com/vmihailenco/msgpack/v5"
)
func main() {
og := map[string]interface{}{
"something:special": uint(123),
"hello, world": "hello!",
}
raw, err := msgpack.Marshal(og)
if err != nil {
panic(err)
}
type Item struct {
SomethingSpecial uint `msgpack:"'something:special'"`
HelloWorld string `msgpack:"'hello, world'"`
}
var item Item
if err := msgpack.Unmarshal(raw, &item); err != nil {
panic(err)
}
fmt.Printf("%#v\n", item)
}
Output: msgpack_test.Item{SomethingSpecial:0x7b, HelloWorld:"hello!"}
Example (Ignore_simple_zero_structs_when_tagged_with_omitempty) ΒΆ
package main
import (
"fmt"
"github.com/vmihailenco/msgpack/v5"
)
type NullInt struct {
Valid bool
Int int
}
func (i *NullInt) Set(j int) {
i.Int = j
i.Valid = true
}
func (i NullInt) IsZero() bool {
return !i.Valid
}
func (i NullInt) MarshalMsgpack() ([]byte, error) {
return msgpack.Marshal(i.Int)
}
func (i *NullInt) UnmarshalMsgpack(b []byte) error {
if err := msgpack.Unmarshal(b, &i.Int); err != nil {
return err
}
i.Valid = true
return nil
}
type Secretive struct {
Visible bool
hidden bool
}
type T struct {
I NullInt `msgpack:",omitempty"`
J NullInt
S Secretive `msgpack:",omitempty"`
}
func main() {
var t1 T
raw, err := msgpack.Marshal(t1)
if err != nil {
panic(err)
}
var t2 T
if err = msgpack.Unmarshal(raw, &t2); err != nil {
panic(err)
}
fmt.Printf("%#v\n", t2)
t2.I.Set(42)
t2.S.hidden = true // won't be included because it is a hidden field
raw, err = msgpack.Marshal(t2)
if err != nil {
panic(err)
}
var t3 T
if err = msgpack.Unmarshal(raw, &t3); err != nil {
panic(err)
}
fmt.Printf("%#v\n", t3)
}
Output: msgpack_test.T{I:msgpack_test.NullInt{Valid:false, Int:0}, J:msgpack_test.NullInt{Valid:true, Int:0}, S:msgpack_test.Secretive{Visible:false, hidden:false}} msgpack_test.T{I:msgpack_test.NullInt{Valid:true, Int:42}, J:msgpack_test.NullInt{Valid:true, Int:0}, S:msgpack_test.Secretive{Visible:false, hidden:false}}
Example (MapStringInterface) ΒΆ
package main
import (
"fmt"
"github.com/vmihailenco/msgpack/v5"
)
func main() {
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
Example (OmitEmpty) ΒΆ
package main
import (
"fmt"
"github.com/vmihailenco/msgpack/v5"
)
func main() {
type Item struct {
Foo string
Bar string
}
item := &Item{
Foo: "hello",
}
b, err := msgpack.Marshal(item)
if err != nil {
panic(err)
}
fmt.Printf("item: %q\n", b)
type ItemOmitEmpty struct {
_msgpack struct{} `msgpack:",omitempty"`
Foo string
Bar string
}
itemOmitEmpty := &ItemOmitEmpty{
Foo: "hello",
}
b, err = msgpack.Marshal(itemOmitEmpty)
if err != nil {
panic(err)
}
fmt.Printf("item2: %q\n", b)
}
Output: item: "\x82\xa3Foo\xa5hello\xa3Bar\xa0" item2: "\x81\xa3Foo\xa5hello"
func PutDecoder ΒΆ
func PutDecoder(dec *Decoder)
func PutEncoder ΒΆ
func PutEncoder(enc *Encoder)
func Register ΒΆ
func Register(value interface{}, enc encoderFunc, dec decoderFunc)
Register registers encoder and decoder functions for a value. This is low level API and in most cases you should prefer implementing CustomEncoder/CustomDecoder or Marshaler/Unmarshaler interfaces.
func RegisterExt ΒΆ
func RegisterExt(extID int8, value MarshalerUnmarshaler)
Example ΒΆ
package main
import (
"encoding/binary"
"fmt"
"time"
"github.com/vmihailenco/msgpack/v5"
)
// https://github.com/fluent/fluentd/wiki/Forward-Protocol-Specification-v1#eventtime-ext-format
type EventTime struct {
time.Time
}
type OneMoreSecondEventTime struct {
EventTime
}
func (tm *EventTime) MarshalMsgpack() ([]byte, error) {
b := make([]byte, 8)
binary.BigEndian.PutUint32(b, uint32(tm.Unix()))
binary.BigEndian.PutUint32(b[4:], uint32(tm.Nanosecond()))
return b, nil
}
func (tm *EventTime) UnmarshalMsgpack(b []byte) error {
if len(b) != 8 {
return fmt.Errorf("invalid data length: got %d, wanted 8", len(b))
}
sec := binary.BigEndian.Uint32(b)
usec := binary.BigEndian.Uint32(b[4:])
tm.Time = time.Unix(int64(sec), int64(usec))
return nil
}
func (tm *OneMoreSecondEventTime) MarshalMsgpack() ([]byte, error) {
b := make([]byte, 8)
binary.BigEndian.PutUint32(b, uint32(tm.Unix()+1))
binary.BigEndian.PutUint32(b[4:], uint32(tm.Nanosecond()))
return b, nil
}
func (tm *OneMoreSecondEventTime) UnmarshalMsgpack(b []byte) error {
if len(b) != 8 {
return fmt.Errorf("invalid data length: got %d, wanted 8", len(b))
}
sec := binary.BigEndian.Uint32(b)
usec := binary.BigEndian.Uint32(b[4:])
tm.Time = time.Unix(int64(sec+1), int64(usec))
return nil
}
func main() {
t := time.Unix(123456789, 123)
{
msgpack.RegisterExt(1, (*EventTime)(nil))
b, err := msgpack.Marshal(&EventTime{t})
if err != nil {
panic(err)
}
var v interface{}
err = msgpack.Unmarshal(b, &v)
if err != nil {
panic(err)
}
fmt.Println(v.(*EventTime).UTC())
tm := new(EventTime)
err = msgpack.Unmarshal(b, &tm)
if err != nil {
panic(err)
}
fmt.Println(tm.UTC())
}
{
msgpack.RegisterExt(1, (*EventTime)(nil))
b, err := msgpack.Marshal(&EventTime{t})
if err != nil {
panic(err)
}
// override ext
msgpack.RegisterExt(1, (*OneMoreSecondEventTime)(nil))
var v interface{}
err = msgpack.Unmarshal(b, &v)
if err != nil {
panic(err)
}
fmt.Println(v.(*OneMoreSecondEventTime).UTC())
}
{
msgpack.RegisterExt(1, (*OneMoreSecondEventTime)(nil))
b, err := msgpack.Marshal(&OneMoreSecondEventTime{
EventTime{t},
})
if err != nil {
panic(err)
}
// override ext
msgpack.RegisterExt(1, (*EventTime)(nil))
var v interface{}
err = msgpack.Unmarshal(b, &v)
if err != nil {
panic(err)
}
fmt.Println(v.(*EventTime).UTC())
}
}
Output: 1973-11-29 21:33:09.000000123 +0000 UTC 1973-11-29 21:33:09.000000123 +0000 UTC 1973-11-29 21:33:10.000000123 +0000 UTC 1973-11-29 21:33:10.000000123 +0000 UTC
func RegisterExtDecoder ΒΆ
func RegisterExtEncoder ΒΆ
func Unmarshal ΒΆ
Unmarshal decodes the MessagePack-encoded data and stores the result in the value pointed to by v.
func UnregisterExt ΒΆ added in v5.1.0
func UnregisterExt(extID int8)
Example ΒΆ
package main
import (
"encoding/binary"
"fmt"
"time"
"github.com/vmihailenco/msgpack/v5"
)
// https://github.com/fluent/fluentd/wiki/Forward-Protocol-Specification-v1#eventtime-ext-format
type EventTime struct {
time.Time
}
type OneMoreSecondEventTime struct {
EventTime
}
func (tm *EventTime) MarshalMsgpack() ([]byte, error) {
b := make([]byte, 8)
binary.BigEndian.PutUint32(b, uint32(tm.Unix()))
binary.BigEndian.PutUint32(b[4:], uint32(tm.Nanosecond()))
return b, nil
}
func (tm *EventTime) UnmarshalMsgpack(b []byte) error {
if len(b) != 8 {
return fmt.Errorf("invalid data length: got %d, wanted 8", len(b))
}
sec := binary.BigEndian.Uint32(b)
usec := binary.BigEndian.Uint32(b[4:])
tm.Time = time.Unix(int64(sec), int64(usec))
return nil
}
func (tm *OneMoreSecondEventTime) MarshalMsgpack() ([]byte, error) {
b := make([]byte, 8)
binary.BigEndian.PutUint32(b, uint32(tm.Unix()+1))
binary.BigEndian.PutUint32(b[4:], uint32(tm.Nanosecond()))
return b, nil
}
func (tm *OneMoreSecondEventTime) UnmarshalMsgpack(b []byte) error {
if len(b) != 8 {
return fmt.Errorf("invalid data length: got %d, wanted 8", len(b))
}
sec := binary.BigEndian.Uint32(b)
usec := binary.BigEndian.Uint32(b[4:])
tm.Time = time.Unix(int64(sec+1), int64(usec))
return nil
}
func main() {
t := time.Unix(123456789, 123)
{
msgpack.RegisterExt(1, (*EventTime)(nil))
b, err := msgpack.Marshal(&EventTime{t})
if err != nil {
panic(err)
}
msgpack.UnregisterExt(1)
var v interface{}
err = msgpack.Unmarshal(b, &v)
wanted := "msgpack: unknown ext id=1"
if err.Error() != wanted {
panic(err)
}
msgpack.RegisterExt(1, (*OneMoreSecondEventTime)(nil))
err = msgpack.Unmarshal(b, &v)
if err != nil {
panic(err)
}
fmt.Println(v.(*OneMoreSecondEventTime).UTC())
}
{
msgpack.RegisterExt(1, (*OneMoreSecondEventTime)(nil))
b, err := msgpack.Marshal(&OneMoreSecondEventTime{
EventTime{t},
})
if err != nil {
panic(err)
}
msgpack.UnregisterExt(1)
var v interface{}
err = msgpack.Unmarshal(b, &v)
wanted := "msgpack: unknown ext id=1"
if err.Error() != wanted {
panic(err)
}
msgpack.RegisterExt(1, (*EventTime)(nil))
err = msgpack.Unmarshal(b, &v)
if err != nil {
panic(err)
}
fmt.Println(v.(*EventTime).UTC())
}
}
Output: 1973-11-29 21:33:10.000000123 +0000 UTC 1973-11-29 21:33:10.000000123 +0000 UTC
Types ΒΆ
type CustomDecoder ΒΆ
type CustomEncoder ΒΆ
Example ΒΆ
package main
import (
"fmt"
"github.com/vmihailenco/msgpack/v5"
)
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.EncodeMulti(s.S, s.N)
}
func (s *customStruct) DecodeMsgpack(dec *msgpack.Decoder) error {
return dec.DecodeMulti(&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 {
// contains filtered or unexported fields
}
A Decoder reads and decodes MessagePack values from an input stream.
func GetDecoder ΒΆ
func GetDecoder() *Decoder
func NewDecoder ΒΆ
NewDecoder returns a new decoder that reads from r.
The decoder introduces its own buffering and may read data from r beyond the requested msgpack values. Buffering can be disabled by passing a reader that implements io.ByteScanner interface.
func (*Decoder) Buffered ΒΆ
Buffered returns a reader of the data remaining in the Decoder's buffer. The reader is valid until the next call to Decode.
func (*Decoder) DecodeArrayLen ΒΆ
DecodeArrayLen decodes array length. Length is -1 when array is nil.
func (*Decoder) DecodeBool ΒΆ
func (*Decoder) DecodeBytes ΒΆ
func (*Decoder) DecodeBytesLen ΒΆ
func (*Decoder) DecodeExtHeader ΒΆ
func (*Decoder) DecodeFloat32 ΒΆ
func (*Decoder) DecodeFloat64 ΒΆ
DecodeFloat64 decodes msgpack float32/64 into Go float64.
func (*Decoder) DecodeInt8 ΒΆ
func (*Decoder) DecodeInt16 ΒΆ
func (*Decoder) DecodeInt32 ΒΆ
func (*Decoder) DecodeInt64 ΒΆ
DecodeInt64 decodes msgpack int8/16/32/64 and uint8/16/32/64 into Go int64.
func (*Decoder) DecodeInterface ΒΆ
DecodeInterface decodes value into interface. It returns following types:
- nil,
- bool,
- int8, int16, int32, int64,
- uint8, uint16, uint32, uint64,
- float32 and float64,
- string,
- []byte,
- slices of any of the above,
- maps of any of the above.
DecodeInterface should be used only when you don't know the type of value you are decoding. For example, if you are decoding number it is better to use DecodeInt64 for negative numbers and DecodeUint64 for positive numbers.
func (*Decoder) DecodeInterfaceLoose ΒΆ
DecodeInterfaceLoose is like DecodeInterface except that:
- int8, int16, and int32 are converted to int64,
- uint8, uint16, and uint32 are converted to uint64,
- float32 is converted to float64.
- []byte is converted to string.
func (*Decoder) DecodeMapLen ΒΆ
DecodeMapLen decodes map length. Length is -1 when map is nil.
func (*Decoder) DecodeMulti ΒΆ
func (*Decoder) DecodeRaw ΒΆ
func (d *Decoder) DecodeRaw() (RawMessage, error)
func (*Decoder) DecodeSlice ΒΆ
func (*Decoder) DecodeString ΒΆ
func (*Decoder) DecodeTypedMap ΒΆ
DecodeTypedMap decodes a typed map. Typed map is a map that has a fixed type for keys and values. Key and value types may be different.
func (*Decoder) DecodeUint ΒΆ
func (*Decoder) DecodeUint8 ΒΆ
func (*Decoder) DecodeUint16 ΒΆ
func (*Decoder) DecodeUint32 ΒΆ
func (*Decoder) DecodeUint64 ΒΆ
DecodeUint64 decodes msgpack int8/16/32/64 and uint8/16/32/64 into Go uint64.
func (*Decoder) DecodeUntypedMap ΒΆ
func (*Decoder) DisableAllocLimit ΒΆ added in v5.4.0
DisableAllocLimit enables fully allocating slices/maps when the size is known
func (*Decoder) DisallowUnknownFields ΒΆ
DisallowUnknownFields causes the Decoder to return an error when the destination is a struct and the input contains object keys which do not match any non-ignored, exported fields in the destination.
func (*Decoder) PeekCode ΒΆ
PeekCode returns the next MessagePack code without advancing the reader. Subpackage msgpack/codes defines the list of available msgpcode.
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.
Example ΒΆ
package main
import (
"bytes"
"fmt"
"github.com/vmihailenco/msgpack/v5"
)
func main() {
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
func (*Decoder) Reset ΒΆ
Reset discards any buffered data, resets all state, and switches the buffered reader to read from r.
func (*Decoder) ResetReader ΒΆ added in v5.4.0
func (*Decoder) SetCustomStructTag ΒΆ
SetCustomStructTag causes the decoder to use the supplied tag as a fallback option if there is no msgpack tag.
func (*Decoder) SetMapDecoder ΒΆ
Example ΒΆ
package main
import (
"bytes"
"fmt"
"github.com/vmihailenco/msgpack/v5"
)
func main() {
buf := new(bytes.Buffer)
enc := msgpack.NewEncoder(buf)
in := map[string]string{"hello": "world"}
err := enc.Encode(in)
if err != nil {
panic(err)
}
dec := msgpack.NewDecoder(buf)
// Causes decoder to produce map[string]string instead of map[string]interface{}.
dec.SetMapDecoder(func(d *msgpack.Decoder) (interface{}, error) {
n, err := d.DecodeMapLen()
if err != nil {
return nil, err
}
m := make(map[string]string, n)
for i := 0; i < n; i++ {
mk, err := d.DecodeString()
if err != nil {
return nil, err
}
mv, err := d.DecodeString()
if err != nil {
return nil, err
}
m[mk] = mv
}
return m, nil
})
out, err := dec.DecodeInterface()
if err != nil {
panic(err)
}
fmt.Printf("%#v", out)
}
Output: map[string]string{"hello":"world"}
func (*Decoder) UseInternedStrings ΒΆ
UseInternedStrings enables support for decoding interned strings.
func (*Decoder) UseLooseInterfaceDecoding ΒΆ
UseLooseInterfaceDecoding causes decoder to use DecodeInterfaceLoose to decode msgpack value into Go interface{}.
func (*Decoder) UsePreallocateValues ΒΆ added in v5.4.0
UsePreallocateValues enables preallocating values in chunks
type Encoder ΒΆ
type Encoder struct {
// contains filtered or unexported fields
}
func GetEncoder ΒΆ
func GetEncoder() *Encoder
func NewEncoder ΒΆ
NewEncoder returns a new encoder that writes to w.
func (*Encoder) EncodeArrayLen ΒΆ
func (*Encoder) EncodeBool ΒΆ
func (*Encoder) EncodeBytes ΒΆ
func (*Encoder) EncodeBytesLen ΒΆ
func (*Encoder) EncodeFloat32 ΒΆ
func (*Encoder) EncodeFloat64 ΒΆ
func (*Encoder) EncodeInt ΒΆ
EncodeNumber encodes an int64 in 1, 2, 3, 5, or 9 bytes. Type of the number is lost during encoding.
func (*Encoder) EncodeInt8 ΒΆ
EncodeInt8 encodes an int8 in 2 bytes preserving type of the number.
func (*Encoder) EncodeInt16 ΒΆ
EncodeInt16 encodes an int16 in 3 bytes preserving type of the number.
func (*Encoder) EncodeInt32 ΒΆ
EncodeInt32 encodes an int32 in 5 bytes preserving type of the number.
func (*Encoder) EncodeInt64 ΒΆ
EncodeInt64 encodes an int64 in 9 bytes preserving type of the number.
func (*Encoder) EncodeMapLen ΒΆ
func (*Encoder) EncodeMapSorted ΒΆ
func (*Encoder) EncodeMulti ΒΆ
func (*Encoder) EncodeString ΒΆ
func (*Encoder) EncodeUint ΒΆ
EncodeUnsignedNumber encodes an uint64 in 1, 2, 3, 5, or 9 bytes. Type of the number is lost during encoding.
func (*Encoder) EncodeUint8 ΒΆ
EncodeUint8 encodes an uint8 in 2 bytes preserving type of the number.
func (*Encoder) EncodeUint16 ΒΆ
EncodeUint16 encodes an uint16 in 3 bytes preserving type of the number.
func (*Encoder) EncodeUint32 ΒΆ
EncodeUint32 encodes an uint16 in 5 bytes preserving type of the number.
func (*Encoder) EncodeUint64 ΒΆ
EncodeUint64 encodes an uint16 in 9 bytes preserving type of the number.
func (*Encoder) Reset ΒΆ
Reset discards any buffered data, resets all state, and switches the writer to write to w.
func (*Encoder) ResetWriter ΒΆ added in v5.4.0
func (*Encoder) SetCustomStructTag ΒΆ
SetCustomStructTag causes the Encoder to use a custom struct tag as fallback option if there is no msgpack tag.
func (*Encoder) SetOmitEmpty ΒΆ added in v5.3.2
SetOmitEmpty causes the Encoder to omit empty values by default.
func (*Encoder) SetSortMapKeys ΒΆ
SetSortMapKeys causes the Encoder to encode map keys in increasing order. Supported map types are:
- map[string]string
- map[string]bool
- map[string]interface{}
func (*Encoder) UseArrayEncodedStructs ΒΆ
UseArrayEncodedStructs causes the Encoder to encode Go structs as msgpack arrays.
Example ΒΆ
package main
import (
"bytes"
"fmt"
"github.com/vmihailenco/msgpack/v5"
)
func main() {
type Item struct {
Foo string
Bar string
}
var buf bytes.Buffer
enc := msgpack.NewEncoder(&buf)
enc.UseArrayEncodedStructs(true)
err := enc.Encode(&Item{Foo: "foo", Bar: "bar"})
if err != nil {
panic(err)
}
dec := msgpack.NewDecoder(&buf)
v, err := dec.DecodeInterface()
if err != nil {
panic(err)
}
fmt.Println(v)
}
Output: [foo bar]
func (*Encoder) UseCompactFloats ΒΆ
UseCompactFloats causes the Encoder to chose a compact integer encoding for floats that can be represented as integers.
func (*Encoder) UseCompactInts ΒΆ
UseCompactEncoding causes the Encoder to chose the most compact encoding. For example, it allows to encode small Go int64 as msgpack int8 saving 7 bytes.
func (*Encoder) UseInternedStrings ΒΆ
UseInternedStrings causes the Encoder to intern strings.
type MarshalerUnmarshaler ΒΆ
type MarshalerUnmarshaler interface {
Marshaler
Unmarshaler
}
type RawMessage ΒΆ
type RawMessage []byte
func (*RawMessage) DecodeMsgpack ΒΆ
func (m *RawMessage) DecodeMsgpack(dec *Decoder) error
func (RawMessage) EncodeMsgpack ΒΆ
func (m RawMessage) EncodeMsgpack(enc *Encoder) error
