golang文件打包后默认体积还是不小, 通过参数以及三方工具可以缓解一下

命令行参数 -ldflags

在程序编译的时候可以加上-ldflags “-s -w” 参数来优化编译程序, 其实通过去除部分连接和调试等信息来使得编译之后的执行程序更小,具体参数如下:

  • -a 强制编译所有依赖包
  • -s 去掉符号表信息, panic时候的stack trace就没有任何文件名/行号信息了.
  • -w 去掉DWARF调试信息,得到的程序就不能用gdb调试了 执行如下命令:

    1
    
    go build -ldflags -w main.go

    对比数据:

    1
    2
    
    -rwxr-xr-x 1 root root  12M 11月 20 11:56 example
    -rwxr-xr-x 1 root root  16M 11月 20 11:56 example2

使用upx

打完包后还可以使用 upx 给压缩一下, 可以用 yum brew 什么的下载, 也可以从github页面下载

执行命令

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
$ upx example


                       Ultimate Packer for eXecutables
                          Copyright (C) 1996 - 2018
UPX 3.95        Markus Oberhumer, Laszlo Molnar & John Reiser   Aug 26th 2018

        File size         Ratio      Format      Name
   --------------------   ------   -----------   -----------
  12083200 ->   4603884   38.10%   linux/amd64   example

Packed 1 file

压缩后

1
2
-rwxr-xr-x 1 root root 4.4M 11月 20 11:56 example
-rwxr-xr-x 1 root root  16M 11月 20 11:56 example2

和原包比对就能看到巨大差距