Перейти к содержимому

Сборка без MsgPack

MsgPack (MessagePack) — это компактный формат бинарной сериализации. Его можно представить как более быструю и компактную альтернативу JSON. Gin по умолчанию включает поддержку рендеринга и привязки MsgPack, что означает, что ваше приложение может принимать и возвращать данные в формате MsgPack из коробки, используя c.Bind() и c.Render() с соответствующим типом контента.

Однако многие приложения используют только JSON и никогда не нуждаются в MsgPack. В этом случае зависимость MsgPack добавляет лишний вес к скомпилированному бинарному файлу. Вы можете исключить её с помощью тега сборки nomsgpack.

Сборка без MsgPack

Передайте тег nomsgpack команде go build:

Окно терминала
go build -tags=nomsgpack .

Это также работает с другими командами Go:

Окно терминала
go run -tags=nomsgpack .
go test -tags=nomsgpack ./...

Что изменяется

При сборке с тегом nomsgpack Gin исключает код рендеринга и привязки MsgPack на этапе компиляции. Это имеет несколько практических последствий:

  • Скомпилированный бинарный файл становится меньше, так как библиотека сериализации MsgPack не компонуется.
  • Любой обработчик, который пытается рендерить или привязывать данные MsgPack, перестанет работать. Если вы используете c.ProtoBuf() или другие рендереры, не связанные с MsgPack, они не затрагиваются.
  • Все функции JSON, XML, YAML, TOML и ProtoBuf продолжают работать нормально.

Проверка результата

Вы можете убедиться в уменьшении размера бинарного файла, сравнив сборки:

Окно терминала
# Стандартная сборка
go build -o gin-app .
ls -lh gin-app
# Сборка без MsgPack
go build -tags=nomsgpack -o gin-app-nomsgpack .
ls -lh gin-app-nomsgpack

Точная экономия зависит от вашего приложения, но удаление MsgPack обычно немного уменьшает итоговый бинарный файл. Для получения дополнительной информации смотрите оригинальный pull request.