forked from mirrors/gotosocial
98263a7de6
* start fixing up tests * fix up tests + automate with drone * fiddle with linting * messing about with drone.yml * some more fiddling * hmmm * add cache * add vendor directory * verbose * ci updates * update some little things * update sig
85 lines
3.2 KiB
Markdown
85 lines
3.2 KiB
Markdown
# MessagePack encoding for Golang
|
|
|
|
[![Build Status](https://travis-ci.org/vmihailenco/msgpack.svg)](https://travis-ci.org/vmihailenco/msgpack)
|
|
[![PkgGoDev](https://pkg.go.dev/badge/github.com/vmihailenco/msgpack/v5)](https://pkg.go.dev/github.com/vmihailenco/msgpack/v5)
|
|
[![Documentation](https://img.shields.io/badge/msgpack-documentation-informational)](https://msgpack.uptrace.dev/)
|
|
[![Chat](https://discordapp.com/api/guilds/752070105847955518/widget.png)](https://discord.gg/rWtp5Aj)
|
|
|
|
> :heart:
|
|
> [**Uptrace.dev** - All-in-one tool to optimize performance and monitor errors & logs](https://uptrace.dev/?utm_source=gh-msgpack&utm_campaign=gh-msgpack-var2)
|
|
|
|
- Join [Discord](https://discord.gg/rWtp5Aj) to ask questions.
|
|
- [Documentation](https://msgpack.uptrace.dev)
|
|
- [Reference](https://pkg.go.dev/github.com/vmihailenco/msgpack/v5)
|
|
- [Examples](https://pkg.go.dev/github.com/vmihailenco/msgpack/v5#pkg-examples)
|
|
|
|
## Features
|
|
|
|
- Primitives, arrays, maps, structs, time.Time and interface{}.
|
|
- Appengine \*datastore.Key and datastore.Cursor.
|
|
- [CustomEncoder]/[CustomDecoder] interfaces for custom encoding.
|
|
- [Extensions](https://pkg.go.dev/github.com/vmihailenco/msgpack/v5#example-RegisterExt) to encode
|
|
type information.
|
|
- Renaming fields via `msgpack:"my_field_name"` and alias via `msgpack:"alias:another_name"`.
|
|
- Omitting individual empty fields via `msgpack:",omitempty"` tag or all
|
|
[empty fields in a struct](https://pkg.go.dev/github.com/vmihailenco/msgpack/v5#example-Marshal-OmitEmpty).
|
|
- [Map keys sorting](https://pkg.go.dev/github.com/vmihailenco/msgpack/v5#Encoder.SetSortMapKeys).
|
|
- Encoding/decoding all
|
|
[structs as arrays](https://pkg.go.dev/github.com/vmihailenco/msgpack/v5#Encoder.UseArrayEncodedStructs)
|
|
or
|
|
[individual structs](https://pkg.go.dev/github.com/vmihailenco/msgpack/v5#example-Marshal-AsArray).
|
|
- [Encoder.SetCustomStructTag] with [Decoder.SetCustomStructTag] can turn msgpack into drop-in
|
|
replacement for any tag.
|
|
- Simple but very fast and efficient
|
|
[queries](https://pkg.go.dev/github.com/vmihailenco/msgpack/v5#example-Decoder.Query).
|
|
|
|
[customencoder]: https://pkg.go.dev/github.com/vmihailenco/msgpack/v5#CustomEncoder
|
|
[customdecoder]: https://pkg.go.dev/github.com/vmihailenco/msgpack/v5#CustomDecoder
|
|
[encoder.setcustomstructtag]:
|
|
https://pkg.go.dev/github.com/vmihailenco/msgpack/v5#Encoder.SetCustomStructTag
|
|
[decoder.setcustomstructtag]:
|
|
https://pkg.go.dev/github.com/vmihailenco/msgpack/v5#Decoder.SetCustomStructTag
|
|
|
|
## Installation
|
|
|
|
msgpack supports 2 last Go versions and requires support for
|
|
[Go modules](https://github.com/golang/go/wiki/Modules). So make sure to initialize a Go module:
|
|
|
|
```shell
|
|
go mod init github.com/my/repo
|
|
```
|
|
|
|
And then install msgpack/v5 (note _v5_ in the import; omitting it is a popular mistake):
|
|
|
|
```shell
|
|
go get github.com/vmihailenco/msgpack/v5
|
|
```
|
|
|
|
## Quickstart
|
|
|
|
```go
|
|
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
|
|
|
|
- [Fast and flexible ORM for sql.DB](https://bun.uptrace.dev)
|