发布于2026-07-03 阅读(0)
扫一扫,手机访问
在 Ubuntu 上打包 Golang 程序,其实没有想象中那么复杂。很多开发者习惯在本地写好代码,直接 go build 完事,但一旦涉及到跨平台分发、容器部署或者交付给测试环境,就会发现事情没那么简单。今天就把这条完整的打包链路梳理一遍——从环境搭建,到交叉编译,再到容器化,一步不落。

首先,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 测试一下,没问题再往下走。
这是 Go 最方便的地方——一套代码,编译出不同平台的二进制文件。关键在于三个环境变量:
CGO_ENABLED=0:禁用 CGO,得到静态二进制,避免跨平台时的动态链接问题。GOOS:目标操作系统,比如 linux、windows、darwin。GOARCH:目标架构,比如 amd64、arm64。举几个常用例子:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o bin/myapp-linux-amd64 main.go
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -o bin/myapp-windows-amd64.exe main.go
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -o bin/myapp-darwin-amd64 main.go
如果平台很多,一个个手动跑太麻烦,可以借助 gox 实现批量构建:
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 czvf myapp-linux-amd64.tar.gz bin/myapp-linux-amd64
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
如果不想每次手动敲 docker 命令,写个 Makefile 或 Shell 脚本更省力。Makefile 示例:
GO := go
OUT := bin/myapp
build:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 $(GO) build -o $(OUT) .
clean:
rm -f $(OUT)
使用时 make build 或 make clean。也可以写一个 build.sh,赋予执行权限 chmod +x build.sh,然后 ./build.sh build 即可。
整套流程跑通之后,后续只需要关注代码本身,打包分发的事情交给脚本和 Docker 就好。效率提升不止一点点。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8