1. 去除完整路径
golangpanicruntime.CallerD:/development/example/example.goexample/example.go
-trimpath
go build -v -trimpath -o example
2. 注入变量
Git
-ldflags="-X"
go build -ldflags="-X 'main.Version=1.0.1'"
mainVersion
3. 减少二进制包的体积

需求:默认的go程序包包含了调试信息和符号表,导致最终的包都会比较大;而一般情况下这些东西在生产环境都是可以去除的;而且更小的包额能加快程序的发布和安装过程

解决

-s -w

理论上能减少1/31/2的体积

go build -ldflags="-s -w" -o example
  • -s: 去掉符号表
  • -w: 去掉调试信息,使用了该选项后无法使用gdb进行调试
upx

这个是一个可选项,在第一步的基础上继续对二进制的包进行压缩

go build -ldflags="-s -w" -o example && upx -9 example
https://github.com/upx/upx/releases/

3.2.1 介绍

upx

3.2.2 安装

Github

3.2.2 原理

upx

压缩包含两个部分

  • 在程序开头或其他合适的地方插入解压代码;
  • 对程序的其他部分压缩。

执行时,同样包含两个部分

  • 首先执行插入的解压代码,将原来的程序在内存中解压出来;
  • 再执行解压后的程序。
upx
upx