此篇介绍一下如何减小Go程序编译后生成的可执行程序的体积。

Golang默认编译出来的可执行文件,一般都比较大。此处介绍一些可以减小可执行文件体积的方法。

Golang编译参数调整

go build -ldflags="-s -w" main.go

-s:忽略符号表和调试信息
-w:忽略DWARFv3调试信息,不生成debug信息,使用该选项后将导致无法使用gdb进行调试

注:Go编译器生成的调试信息格式为DWARFv3,只要版本高于7.1的GDB都可以支持调试

go build -gcflags '-N -l'

-N 禁止编译优化
-l 禁止内联,禁止内联也可以在一定程度上减小可执行程序大小

可以使用 go tool compile --help 查看 gcflags 各参数含义

UPX压缩

https://github.com/upx/upx

upx是一个二进制压缩工具,可以用来压缩编译出来的二进制文件尺寸。

upx --brute bin
upx --ultra-brute bin

可以使用不同的压缩参数,来进行不同程度的压缩。