msgpack
packagemoduleThis package is not in the latest version of its module.
Details
Validgo.mod file
The Go module system was introduced in Go 1.11 and is the official dependency management solution for Go.
Redistributable license
Redistributable licenses place minimal restrictions on how software can be used, modified, and redistributed.
Tagged version
Modules with tagged versions give importers more predictable builds.
Stable version
When a project reaches major version v1 it is considered stable.
- Learn more about best practices
Repository
Links
README¶
MessagePack encoding for Golang
msgpack is brought to you by ⭐uptrace/uptrace.Uptrace is anopen source APM and blazingly fastdistributed tracing tool poweredby OpenTelemetry and ClickHouse. Give it a star as well!
Resources
Features
- Primitives, arrays, maps, structs, time.Time and interface{}.
- Appengine *datastore.Key and datastore.Cursor.
- CustomEncoder/CustomDecoder interfaces for custom encoding.
- Extensions to encodetype information.
- Renaming fields via
msgpack:"my_field_name"and alias viamsgpack:"alias:another_name". - Omitting individual empty fields via
msgpack:",omitempty"tag or allempty fields in a struct. - Map keys sorting.
- Encoding/decoding allstructs as arraysorindividual structs.
- Encoder.SetCustomStructTag withDecoder.SetCustomStructTag can turn msgpack into drop-inreplacement for any tag.
- Simple but very fast and efficientqueries.
Installation
msgpack supports 2 last Go versions and requires support forGo modules. So make sure to initialize a Go module:
go mod init github.com/my/repoAnd then install msgpack/v5 (notev5 in the import; omitting it is a popular mistake):
go get github.com/vmihailenco/msgpack/v5Quickstart
import "github.com/vmihailenco/msgpack/v5"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}See also
- Golang ORM for PostgreSQL, MySQL, MSSQL, and SQLite
- Golang PostgreSQL
- Golang HTTP router
- Golang ClickHouse ORM
Contributors
Thanks to all the people who already contributed!
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) 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) 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) DecodeUint16() (uint16, error)
- func (d *Decoder) DecodeUint32() (uint32, error)
- func (d *Decoder) DecodeUint64() (uint64, error)
- func (d *Decoder) DecodeUint8() (uint8, 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) EncodeInt16(n int16) error
- func (e *Encoder) EncodeInt32(n int32) error
- func (e *Encoder) EncodeInt64(n int64) error
- func (e *Encoder) EncodeInt8(n int8) 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) EncodeUint16(n uint16) error
- func (e *Encoder) EncodeUint32(n uint32) error
- func (e *Encoder) EncodeUint64(n uint64) error
- func (e *Encoder) EncodeUint8(n uint8) 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¶
funcMarshal¶
Marshal returns the MessagePack encoding of v.
Example¶
type Item struct {Foo string}b, err := msgpack.Marshal(&Item{Foo: "bar"})if err != nil {panic(err)}var item Itemerr = msgpack.Unmarshal(b, &item)if err != nil {panic(err)}fmt.Println(item.Foo)Output:bar
Example (AsArray)¶
type Item struct {_msgpack struct{} `msgpack:",as_array"`Foo stringBar string}var buf bytes.Bufferenc := 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)¶
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 Itemif 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)¶
var t1 Traw, err := msgpack.Marshal(t1)if err != nil {panic(err)}var t2 Tif 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 fieldraw, err = msgpack.Marshal(t2)if err != nil {panic(err)}var t3 Tif 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)¶
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 = 1hello = world
Example (OmitEmpty)¶
type Item struct {Foo stringBar 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 stringBar 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"
funcPutDecoder¶
func PutDecoder(dec *Decoder)
funcPutEncoder¶
func PutEncoder(enc *Encoder)
funcRegister¶
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 implementingCustomEncoder/CustomDecoder or Marshaler/Unmarshaler interfaces.
funcRegisterExt¶
func RegisterExt(extIDint8, valueMarshalerUnmarshaler)
Example¶
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 extmsgpack.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 extmsgpack.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 UTC1973-11-29 21:33:09.000000123 +0000 UTC1973-11-29 21:33:10.000000123 +0000 UTC1973-11-29 21:33:10.000000123 +0000 UTC
funcUnmarshal¶
Unmarshal decodes the MessagePack-encoded data and stores the resultin the value pointed to by v.
funcUnregisterExt¶added inv5.1.0
func UnregisterExt(extIDint8)
Example¶
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 UTC1973-11-29 21:33:10.000000123 +0000 UTC
Types¶
typeCustomDecoder¶
typeCustomEncoder¶
Example¶
package mainimport ("fmt""github.com/vmihailenco/msgpack/v5")type customStruct struct {S stringN 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 customStructerr = msgpack.Unmarshal(b, &v)if err != nil {panic(err)}fmt.Printf("%#v", v)}Output:msgpack_test.customStruct{S:"hello", N:42}
typeDecoder¶
type Decoder struct {// contains filtered or unexported fields}A Decoder reads and decodes MessagePack values from an input stream.
funcGetDecoder¶
func GetDecoder() *Decoder
funcNewDecoder¶
NewDecoder returns a new decoder that reads from r.
The decoder introduces its own buffering and may read data from rbeyond the requested msgpack values. Buffering can be disabledby 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)DecodeFloat32¶
func (*Decoder)DecodeFloat64¶
DecodeFloat64 decodes msgpack float32/64 into Go float64.
func (*Decoder)DecodeInt16¶
func (*Decoder)DecodeInt32¶
func (*Decoder)DecodeInt64¶
DecodeInt64 decodes msgpack int8/16/32/64 and uint8/16/32/64into Go int64.
func (*Decoder)DecodeInt8¶
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 valueyou are decoding. For example, if you are decoding number it is better to useDecodeInt64 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)DecodeUint16¶
func (*Decoder)DecodeUint32¶
func (*Decoder)DecodeUint64¶
DecodeUint64 decodes msgpack int8/16/32/64 and uint8/16/32/64into Go uint64.
func (*Decoder)DecodeUint8¶
func (*Decoder)DecodeUntypedMap¶
func (*Decoder)DisableAllocLimit¶added inv5.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 destinationis a struct and the input contains object keys which do not match anynon-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 skippingany other data. Query consists of map keys and array indexes separated with dot,e.g. key1.0.key2.
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
func (*Decoder)Reset¶
Reset discards any buffered data, resets all state, and switches the bufferedreader to read from r.
func (*Decoder)ResetReader¶added inv5.4.0
func (*Decoder)SetCustomStructTag¶
SetCustomStructTag causes the decoder to use the supplied tag as a fallback optionif there is no msgpack tag.
func (*Decoder)SetMapDecoder¶
Example¶
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 DecodeInterfaceLooseto decode msgpack value into Go interface{}.
func (*Decoder)UsePreallocateValues¶added inv5.4.0
UsePreallocateValues enables preallocating values in chunks
typeEncoder¶
type Encoder struct {// contains filtered or unexported fields}funcGetEncoder¶
func GetEncoder() *Encoder
funcNewEncoder¶
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)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)EncodeInt8¶
EncodeInt8 encodes an int8 in 2 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)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)EncodeUint8¶
EncodeUint8 encodes an uint8 in 2 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 inv5.4.0
func (*Encoder)SetCustomStructTag¶
SetCustomStructTag causes the Encoder to use a custom struct tag asfallback option if there is no msgpack tag.
func (*Encoder)SetOmitEmpty¶added inv5.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¶
type Item struct {Foo stringBar string}var buf bytes.Bufferenc := 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 encodingfor 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.
typeMarshalerUnmarshaler¶
type MarshalerUnmarshaler interface {MarshalerUnmarshaler}typeRawMessage¶
type RawMessage []byte
func (*RawMessage)DecodeMsgpack¶
func (m *RawMessage) DecodeMsgpack(dec *Decoder)error
func (RawMessage)EncodeMsgpack¶
func (mRawMessage) EncodeMsgpack(enc *Encoder)error
