Ubuntu 下 Golang 打包流程详解
一 环境准备与项目初始化
sudo apt update && sudo apt install -y golang-gosudo tar -C /usr/local -xzf go1.xx.linux-amd64.tar.gzexport PATH=$PATH:/usr/local/go/bin,执行 source ~/.bashrcgo versiongo mod init <module-name>go mod tidy 下载依赖二 本地构建与常用编译选项
go build -o myapp main.gogo build -ldflags "-s -w" -o myapp main.goCGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o myapp main.goCGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -o myapp.exe main.goCGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -o myapp main.gogo install github.com/mitchellh/gox@latestgox -output="dist/{{.OS}}_{{.Arch}}/{{.Dir}}" .sudo apt-get install upxupx --best myapp三 打包分发与交付物
tar czvf myapp.tar.gz myapp config/ldd myapp(若显示 “not a dynamic executable” 则为静态)file myappsha256sum myapp.tar.gzdist/linux_amd64/myappdist/windows_amd64/myapp.exedist/darwin_amd64/myappgit describe --tags 注入版本信息到构建。四 Docker 多阶段构建与最小化镜像
FROM golang:1.22 AS builder
WORKDIR /app
COPY . .
RUN go mod download
RUN 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 --rm myapp:latest五 自动化发布与进阶场景
make build-linux, make build-windows, make build-darwin, make dist, make cleangoreleaser init 生成 .goreleaser.ymlgoreleaser release(或 --snapshot 跳过发布)