docs/guide/advance-format.md
Fiber lets you use MessagePack for efficient binary serialization. Use one of the popular Go libraries below to encode and decode data in handlers.
application/vnd.msgpack content type out of the box. See the Binding documentation for details.Bind().MsgPack() to bind data to structs, similar to JSON. Ctx.AutoFormat() responds with MsgPack when the Accept header is application/vnd.msgpack. See the AutoFormat documentation for more.Install either library using:
go get github.com/vmihailenco/msgpack
# or
go get github.com/shamaton/msgpack/v3
Note: Fiber doesn't bundle a MsgPack implementation because it's outside the Go standard library. Pick one of the popular libraries in the ecosystem; the two below are widely used and well maintained.
shamaton/msgpack/v3import (
"github.com/gofiber/fiber/v3"
"github.com/shamaton/msgpack/v3"
)
type User struct {
Name string `msgpack:"name"` // tag may vary depending on your MsgPack library
Age int `msgpack:"age"`
}
func main() {
app := fiber.New(fiber.Config{
// Optional: Set custom MsgPack encoder/decoder
MsgPackEncoder: msgpack.Marshal,
MsgPackDecoder: msgpack.Unmarshal,
})
app.Post("/msgpack", func(c fiber.Ctx) error {
var user User
if err := c.Bind().MsgPack(&user); err != nil {
return err
}
// Content type will be set automatically to application/vnd.msgpack
return c.MsgPack(user)
})
app.Listen(":3000")
}
Fiber doesn't ship with a CBOR implementation. Use a library such as fxamacker/cbor to add encoding and decoding.
Bind().CBOR() to bind CBOR to structs. Ctx.AutoFormat() replies with CBOR when the Accept header is application/cbor. See the AutoFormat documentation for details.go get github.com/fxamacker/cbor/v2
Configure Fiber with the chosen library:
import (
"github.com/gofiber/fiber/v3"
"github.com/fxamacker/cbor/v2"
)
func main() {
app := fiber.New(fiber.Config{
CBOREncoder: cbor.Marshal,
CBORDecoder: cbor.Unmarshal,
})
type User struct {
Name string `cbor:"name"`
Age int `cbor:"age"`
}
app.Post("/cbor", func(c fiber.Ctx) error {
var user User
if err := c.Bind().CBOR(&user); err != nil {
return err
}
// Content type will be set automatically to application/cbor
return c.CBOR(user)
})
app.Listen(":3000")
}