自定义 Ubuntu 上的 Golang 打包配置
一 环境与基础配置
sudo apt update && sudo apt install -y golangwget https://golang.google.cn/dl/go1.22.0.linux-amd64.tar.gz && sudo tar -C /usr/local -xzf go1.22.0.linux-amd64.tar.gz~/.bashrc 或 /etc/profile 后执行 source):
export GOROOT=/usr/local/goexport GOPATH=$HOME/goexport PATH=$PATH:$GOROOT/bin:$GOPATH/binexport GOPROXY=https://goproxy.cn,directexport GO111MODULE=ongo mod init <module>go mod tidy 自动分析并补齐依赖。二 构建与打包的核心变量
-ldflags:控制链接参数,如去除调试信息、设置版本信息-a -installsuffix cgo**:配合 CGO_ENABLED=0` 生成更纯粹的静态二进制CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags "-s -w" -o bin/myapp main.gosudo apt-get install -y upxupx --best bin/myapp。三 自动化与多平台打包脚本
OUTPUT_NAME=myapp、BUILD_ENV=CGO_ENABLED=0 GOOS=linux GOARCH=amd64build 调用 go build -o $(BUILD_TARGET) .,clean 清理产物make 或 make build、make cleanbuild/clean,case "$1" 解析命令参数chmod +x build.sh && ./build.sh buildlinux/amd64、windows/amd64、darwin/arm64),循环设置 GOOS/GOARCH 并执行构建,产物按平台与架构分目录存放。四 Docker 多阶段构建与最小化镜像
FROM golang:1.22 AS builder → WORKDIR /app → COPY . . → go mod download → CGO_ENABLED=0 GOOS=linux go build -ldflags "-s -w" -o myapp .FROM scratch → COPY --from=builder /app/myapp /myapp → ENTRYPOINT ["/myapp"]docker build -t myapp:latest . 与 docker run myapp:latest五 实用建议与常见问题
-ldflags "-s -w" 去除符号与调试信息,再配合 UPX 压缩CGO_ENABLED=0go mod tidyGOPROXY=https://goproxy.cn,directGO111MODULE=on,检查模块路径与 go.modCGO_ENABLED=0;需要 C 库时改为动态链接并准备交叉编译环境bin/ 与平台子目录规范。