在 Ubuntu 下对 Golang 编译产物进行压缩,可以从「编译参数优化」和「二进制后处理」两个层面来做。下面按实用程度从高到低给你一套完整方案。
go build -ldflags="-s -w" main.go
说明:
-s:去掉符号表(symbol table)-w:去掉 DWARF 调试信息✅ 效果明显,体积可减少 20%~40%
CGO_ENABLED=0 go build -ldflags="-s -w" main.go
✅ 好处:
⚠️ 注意:
sqlite、net 某些特性,需测试GOOS=linux GOARCH=amd64 CGO_ENABLED=0 \
go build -ldflags="-s -w" -o app main.go
sudo apt update
sudo apt install upx
upx --best app
或极限压缩:
upx --ultra-brute app
✅ 效果:
⚠️ 注意:
go build -trimpath -ldflags="-s -w"
-trimpath:去掉路径信息github.com/gin-gonic/gin 等重型框架net/http(标准库)echofiber(但体积略大)FROM golang:1.22 AS builder
WORKDIR /app
COPY . .
RUN CGO_ENABLED=0 go build -ldflags="-s -w" -o app
FROM alpine
COPY --from=builder /app/app /app
RUN apk add --no-cache upx && upx --best /app
CMD ["/app"]
✅ 最终镜像可 < 10MB
| 方式 | 大小 |
|---|---|
| 默认编译 | 14 MB |
-ldflags="-s -w" |
9 MB |
| + UPX | 3 MB |
| + CGO_ENABLED=0 | 2.8 MB |
✅ 最推荐方案:
CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o app
upx --best app
如果你愿意,可以告诉我:
我可以给你 定制最优编译命令。