可以的。Ubuntu 下用 Go 做交叉编译(交叉打包)非常简单,而且是 Go 的强项之一。
Go 自带交叉编译支持,不需要额外安装目标平台工具链(除非用到 cgo)。
通过设置两个环境变量即可:
GOOS:目标操作系统GOARCH:目标 CPU 架构GOOS=windows GOARCH=amd64 go build -o app.exe main.go
GOOS=darwin GOARCH=amd64 go build -o app-mac main.go
(M1/M2 用 arm64)
GOOS=darwin GOARCH=arm64 go build -o app-mac-arm main.go
GOOS=linux GOARCH=arm GOARM=7 go build -o app-arm main.go
GOOS=linux GOARCH=arm64 go build -o app-arm64 main.go
go tool dist list
输出示例:
linux/amd64
linux/arm64
windows/amd64
darwin/arm64
...
默认 Go 是静态编译,交叉编译无障碍。
查看是否使用 cgo:
go env CGO_ENABLED
关闭 cgo:
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build
就不能纯交叉编译,需要:
例如:
sudo apt install gcc-arm-linux-gnueabihf
CGO_ENABLED=1 CC=arm-linux-gnueabihf-gcc \
GOOS=linux GOARCH=arm go build
FROM golang:1.22
WORKDIR /app
COPY . .
RUN CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -o app
✅ Ubuntu + Go 完全支持交叉打包
✅ 不用 cgo 时几乎零配置
✅ 一条命令跨平台
⚠️ 用 cgo 才需要额外工具链
如果你告诉我:
我可以给你 精确命令或 Docker 方案。