Ubuntu下Golang打包的高效做法
一 基础流程与环境准备
二 体积优化与多平台交叉编译
三 自动化与工程化实践
Makefile 示例(支持多目标一键构建与清理):
makefile
GO := go
OUTPUT := myapp
BIN := bin/$(OUTPUT)
LDFLAGS := -ldflags “-s -w”
BUILD_ENV := CGO_ENABLED=0 GOOS=linux GOARCH=amd64
.PHONY: all build clean
all: build
build:
mkdir -p bin
$(BUILD_ENV) $(GO) build $(LDFLAGS) -o $(BIN) .
clean:
rm -f $(BIN)
Shell 脚本:将构建、清理等封装为 ./build.sh build/clean,便于 CI 或本地复用。
版本与元信息注入:结合 ldflags 注入版本号、构建时间、Git 提交等,便于排查与追踪发布版本(示例见下节)。
四 Docker 最小化镜像与发布交付
多阶段构建(推荐):
Dockerfile
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。
产物归档:构建完成后用 tar.gz 或 zip 打包二进制与 README/配置/脚本,便于传输与发布。
五 常见问题与实用建议