以下是Ubuntu下Golang打包的最佳实践:
go mod init初始化模块,go mod tidy自动管理依赖版本,确保可移植性。CGO_ENABLED=0避免动态库依赖,生成纯静态二进制文件,可直接运行于无Go环境的系统。musl-gcc配合-extldflags="-static"。GOOS和GOARCH指定目标平台(如GOOS=linux GOARCH=amd64),一键生成多平台二进制文件。upx --best压缩二进制文件,减小体积(支持--lzma进一步优化)。Makefile或build.sh脚本封装构建逻辑,支持一键编译、清理缓存等操作。scratch镜像构建最小体积容器,避免依赖问题。gpg对二进制文件签名,确保完整性;通过ldd验证是否为静态编译。示例命令:
# 静态编译Linux amd64版本
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-s -w" -o app .
# 交叉编译Windows版本
GOOS=windows GOARCH=amd64 CGO_ENABLED=0 go build -o app.exe .
# 使用Docker构建并运行
docker build -t myapp . && docker run -d -p 8080:8080 myapp
参考来源: