跳转到内容

不使用 MsgPack 构建

MsgPack(MessagePack)是一种紧凑的二进制序列化格式——可以将其视为 JSON 的更快、更小的替代品。Gin 默认包含 MsgPack 渲染和绑定支持,这意味着你的应用可以开箱即用地使用 c.Bind()c.Render() 以适当的内容类型接受和返回 MsgPack 编码的数据。

然而,许多应用只使用 JSON,从不需要 MsgPack。在这种情况下,MsgPack 依赖会给编译后的二进制文件增加不必要的体积。你可以使用 nomsgpack 构建标签将其剥离。

不使用 MsgPack 构建

nomsgpack 标签传递给 go build

Terminal window
go build -tags=nomsgpack .

这也适用于其他 Go 命令:

Terminal window
go run -tags=nomsgpack .
go test -tags=nomsgpack ./...

有什么变化

当你使用 nomsgpack 构建时,Gin 会在编译时排除 MsgPack 渲染和绑定代码。这会产生以下实际影响:

  • 编译后的二进制文件更小,因为 MsgPack 序列化库不会被链接进来。
  • 任何尝试渲染或绑定 MsgPack 数据的处理函数将不再工作。如果你使用 c.ProtoBuf() 或其他非 MsgPack 渲染器,它们不受影响。
  • 所有 JSON、XML、YAML、TOML 和 ProtoBuf 功能继续正常工作。

验证结果

你可以通过比较构建来确认二进制文件大小的减少:

Terminal window
# Standard build
go build -o gin-app .
ls -lh gin-app
# Build without MsgPack
go build -tags=nomsgpack -o gin-app-nomsgpack .
ls -lh gin-app-nomsgpack

确切的节省量取决于你的应用,但移除 MsgPack 通常会减少最终二进制文件的一小部分体积。更多背景信息请参阅原始 Pull Request