Ubuntu打包Golang应用的关键技巧
一 环境准备与依赖管理
sudo apt-get update && sudo apt-get install -y golang build-essential。如使用官方压缩包安装,解压至 /usr/local 并将 /usr/local/go/bin 加入 PATH。完成后用 go version 验证。go mod init <module>、go mod tidy 自动分析并补齐依赖;若使用 GOPATH 模式,需保证依赖在 GOPATH 下,且必要时设置 GO111MODULE=on。source 使其生效。二 构建与优化
go build -o <name> <main.go|package>,生成可执行文件。GOOS=linux GOARCH=amd64 go build -o appGOOS=windows GOARCH=amd64 go build -o app.exeGOOS=darwin GOARCH=amd64 go build -o appCGO_ENABLED=0 GOOS=linux go build -ldflags "-s -w" -o app(CGO 禁用后更易获得静态二进制;-ldflags "-s -w" 去除符号与调试信息)。sudo apt-get install -y upx 后执行 upx --best app。GOMAXPROCS=$(nproc)、GOGC=20,并可使用 sccache 或 distcc 做分布式/缓存加速。三 交付与分发
tar czvf app.tar.gz app config/,便于传输与备份。FROM golang:1.16 AS builder ... RUN CGO_ENABLED=0 GOOS=linux go build -o myapp .FROM scratch COPY --from=builder /app/myapp /myapp ENTRYPOINT ["/myapp"]四 自动化与常见坑
GO111MODULE=on)、执行 go mod tidy。CGO_ENABLED=0 与 -ldflags "-s -w",交付前再用 UPX 压缩。chmod +x <binary> 后再执行。五 进阶 生成C静态库供C C++调用
CGO_ENABLED=1 go build -o libmylib.a -buildmode=c-archive main.go(生成 libmylib.a 与 main.h)。gcc -o myapp main.c -L. -lmylib -static(按需选择是否静态链接 C 运行时)。