温馨提示×

ubuntu golang打包体积如何减

小樊
38
2026-10-04 09:07:54
栏目: 编程语言

在 Ubuntu 上减小 Golang 编译产物体积,常用且有效的手段如下(从最常用到进阶):


一、基础必做(效果最明显)

1. 关闭调试信息与符号表

go build -ldflags="-s -w" main.go
  • -s:去掉符号表
  • -w:去掉 DWARF 调试信息

✅ 通常可减小 20%~30%


2. 使用静态编译 + 压缩工具

UPX(强烈推荐)

sudo apt install upx
upx --best --lzma your_binary
  • 可再压缩 50%~70%
  • 启动稍慢,但体积极小

⚠️ 注意:

  • 某些杀毒软件会误报
  • 不适合对启动延迟极度敏感的服务

二、Go 编译参数优化

3. 关闭 CGO(如果不需要 C 库)

CGO_ENABLED=0 go build -ldflags="-s -w" main.go
  • 避免 libc 依赖
  • 更适合容器 / 最小化镜像

4. 使用更小的基础镜像(Docker 场景)

FROM golang:1.22 AS builder
RUN CGO_ENABLED=0 go build -ldflags="-s -w"

FROM gcr.io/distroless/static
COPY --from=builder /app /app

或:

FROM alpine

三、代码层面优化

5. 减少依赖

  • 避免引入大型框架(如 gin 可换 httprouter)
  • 使用 go mod tidy
  • 避免 import _ 无用包

查看依赖体积:

go mod why xxx

6. 移除未使用代码

  • 使用 deadcode / staticcheck
go install golang.org/x/tools/cmd/deadcode@latest

四、高级手段(可选)

7. 使用 Go 1.21+ 的裁剪

go build -trimpath -ldflags="-s -w"

8. 使用 TinyGo(极端场景)

适合 CLI / 嵌入式:

tinygo build -o app main.go

⚠️ 不兼容所有标准库


五、效果示例(典型 Web 服务)

方式 体积
默认编译 15 MB
-s -w 11 MB
+ UPX 4 MB
+ distroless 镜像 <10 MB

推荐组合(Ubuntu 本地)

CGO_ENABLED=0 go build -ldflags="-s -w" -o app main.go
upx --best --lzma app

如果你愿意,可以告诉我:

  • 是否是 Docker 部署
  • 是否是 CLI / Web / 微服务
  • Go 版本

我可以给你一套针对性最优方案。

0 踩