教你go语言如何压缩打包

Posted by Naah on Monday, Oct 01,2018 19:42:19

1 压缩前后对比图

只有一句hello world!竟然打包后达到了2.1M

2 详细过程

2.1 参数打包

2.1.1 使用带有参数的go build 进行打包

go build -ldflags "-s -w" hello.go
  1. -ldflags ‘[pattern=]arg list’ arguments to pass on each go tool link invocation.每个go工具的参数列表连接调用的传递
  2. -s 去掉符号表,堆栈跟踪时不显示任何文件名和行号信息,跟C/C++的strip效果一样
  3. -w 去掉DWARF调试信息,使程序不能gdb调试

2.1.2 压缩结果

我们可以看到,使用参数进行打包后,由原本的2.1M下降到了1.4M

2.2 加壳压缩

2.2.1 安装upx

这里我以macOS为例,我们使用brew进行安装upx(类似centos下的yum,ubuntu的apt-get)

brew install upx

如下图所示,则代表安装成功!

注意

upx在mac平台下的3.9.5版本有bug!!!

给golang加壳后会导致无法运行issues222

需要使用最新版的3.9.6进行加壳

brew install --HEAD upx

2.2.2 使用upx进行加壳压缩

使用下面的命令对已生成的可执行文件进行压缩打包

upx ./hello

从下面的截图中,我们可以看出压缩比37%,文件大小由1417520压缩到524944

2.2.3 压缩结果

我们可以看到,对可执行文件进行加壳压缩后,由原本的1.4M下降到了525K