【注意】最后更新于 November 21, 2019,文中内容可能已过时,请谨慎使用。
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
|
和原包比对就能看到巨大差距
文章作者
GPF
上次更新
2019-11-21
(be89be9)