go学习笔记
基础
go 定义变量的几种方式
常量的声明
go基本数据类型
go语言中的流程控制
golang中的数组
切片
golang中的map 详解
golang 函数详解
内置函数 panic/recover
golang time包 以及日志函数
golang中的指针
golang 中的结构体
Golang 结构体 和 json互相转换 序列化 反序列化
Golang 中的 go mod 以及 Golang包 详解
golang 中的接口
golang goroutine channel 实现并发 和 并行
channel
goroutine 互斥锁 读写互斥锁
golang 反射
golang 标准库
io
strconv
工具 + blog
进程 线程 协程
空接口 类型断言
为Go项目编写Makefile
减小 Go 代码编译后的二进制体积
go windows下编译linux可执行文件
本文档使用 MrDoc 发布
-
+
首页
减小 Go 代码编译后的二进制体积
# 编译选项 Go 编译器默认编译出来的程序会带有符号表和调试信息,一般来说 release 版本可以去除调试信息以减小二进制体积。 ``` $ go build -ldflags="-s -w" -o server main.go $ ls -lh server -rwxr-xr-x 1 dj staff 7.8M Dec 8 00:29 server ``` * -s:忽略符号表和调试信息。 * -w:忽略DWARFv3调试信息,使用该选项后将无法使用gdb进行调试。 体积从 9.8M 下降到 7.8M,下降约 20%。 # 使用 upx 减小体积 upx 是一个常用的压缩动态库和可执行文件的工具,通常可减少 50-70% 的体积。 upx 的安装方式非常简单,我们可以直接从 github 下载最新的 release 版本,支持 Windows 和 Linux,在 Ubuntu 或 Mac 可以直接使用包管理工具安装。 ## 仅使用 upx upx 有很多参数,最重要的则是压缩率,1-9,1 代表最低压缩率,9 代表最高压缩率。 接下来,我们看一下,如果只使用 upx 压缩,二进制的体积可以减小多少呢。 ``` $ go build -o server main.go && upx -9 server File size Ratio Format Name -------------------- ------ ----------- ----------- 10253684 -> 5210128 50.81% macho/amd64 server $ ls -lh server -rwxr-xr-x 1 dj staff 5.0M Dec 8 00:45 server ``` 可以看到,使用 upx 后,可执行文件的体积从 9.8M 缩小到了 5M,缩小了 50%。 ## upx 和编译选项组合 ``` $ go build -ldflags="-s -w" -o server main.go && upx -9 server File size Ratio Format Name -------------------- ------ ----------- ----------- 8213876 -> 3170320 38.60% macho/amd64 server $ ls -lh server -rwxr-xr-x 1 dj staff 3.0M Dec 8 00:47 server ``` 使用编译选项后,体积从原来的 9.8M 下降了 20% 到 7.8M,使用 upx 压缩后,体积进一步下降 60% 到 3M。累进下降约 70%。
admin
2023年5月26日 18:00
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码