在 Ubuntu 上打包 Golang 程序的实用步骤
一 准备环境
- 安装 Go(任选其一)
- 使用发行版仓库:sudo apt-get update && sudo apt-get install -y golang
- 或从官网安装包:wget 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)
- export GOROOT=/usr/local/go
- export GOPATH=$HOME/go
- export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
- 使配置生效:source ~/.bashrc
- 验证:go version 应输出版本号
二 本地构建可执行文件
- 进入项目根目录(包含 main.go 或 go.mod)
- 下载依赖:go mod tidy
- 构建:go build -o myapp main.go(二进制名为 myapp;在 Linux 上默认可直接执行)
- 运行测试:./myapp
三 交叉编译与多平台产物
- 常用环境变量
- CGO_ENABLED=0:禁用 CGO,便于得到静态二进制,跨平台更稳定
- GOOS:目标操作系统(如 linux、windows、darwin)
- GOARCH:目标架构(如 amd64、arm64)
- 示例命令
- Linux amd64:CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o bin/myapp-linux-amd64 main.go
- Windows 64 位:CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -o bin/myapp-windows-amd64.exe main.go
- macOS amd64:CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -o bin/myapp-darwin-amd64 main.go
- 批量多平台(需安装工具):go get github.com/mitchellh/gox,然后 gox -output=“bin/myapp_{{.OS}}_{{.Arch}}” main.go
四 减小体积与产物归档
- 使用 UPX 压缩(可选)
- 安装:sudo apt-get install -y upx
- 压缩:upx --best bin/myapp-linux-amd64(显著减小体积,极少数场景可能带来启动开销)
- 打包归档便于分发
- tar.gz:tar czvf myapp-linux-amd64.tar.gz bin/myapp-linux-amd64
- zip:zip myapp-linux-amd64.zip bin/myapp-linux-amd64
五 容器化打包与自动化
- Docker 多阶段构建(示例)
- Dockerfile:
- FROM golang:1.22 AS builder
- WORKDIR /app
- COPY . .
- RUN go mod download
- RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o myapp .
- FROM scratch
- COPY --from=builder /app/myapp /myapp
- ENTRYPOINT [“/myapp”]
- 构建镜像:docker build -t myapp:latest .
- 运行容器:docker run --rm -p 8080:8080 myapp:latest
- 自动化脚本
- Makefile 示例:
- GO := go
- OUT := bin/myapp
- build:
- CGO_ENABLED=0 GOOS=linux GOARCH=amd64 $(GO) build -o $(OUT) .
- clean:
- 使用:make build / make clean
- Shell 脚本示例(build.sh)
- 赋予执行权限:chmod +x build.sh
- 使用:./build.sh build / ./build.sh clean