Linux 下 Go 跨平台开发实战指南
一 环境统一与版本管理
gvm install go1.21.5 && gvm use go1.21.5 --default。go mod init、go get、go mod tidy,提交 go.mod 与 go.sum;尽量避免使用本地 replace,减少“在我机器上能跑”的问题。.vscode/settings.json;代码风格用 gofumpt 或 goimports;静态检查用 golangci-lint 并提供 .golangci.yml;用 Makefile 封装 build/test/fmt 等常用命令,屏蔽系统差异。二 交叉编译核心要点
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o app-linuxCGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -o app.exeCGO_ENABLED=0 GOOS=darwin GOARCH=arm64 go build -o app-darwin三 多平台构建与交付
FROM golang:1.21 AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -o app-linux-arm64 .
FROM alpine:latest
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY --from=builder /app/app-linux-arm64 .
CMD ["./app-linux-arm64"]
构建与运行:docker build -t myapp . && docker run --rm myapp。四 平台特定代码与条件编译
_linux.go、_windows.go、_darwin.go、_unix.go。//go:build linux 或 // +build linux。//go:build linux//go:build windowsruntime.GOOS 分支;保持接口一致,便于测试与替换;与交叉编译天然契合,仅设置 GOOS/GOARCH 即可自动选取对应文件。五 常见问题与排查清单
CGO_ENABLED=0;若必须启用,需为目标平台配置交叉编译器与对应 C 库,并处理好头文件与链接路径。replace;在 CI 中执行 go mod tidy 校验一致性。chmod +x <binary>;容器中使用非 root 用户运行,遵循最小权限原则。