在 Ubuntu 下使用 Golang 打包(编译)时遇到问题,可以从下面几个方面逐步排查。我先给你一个通用排查思路,然后再列举 常见错误与解决办法。
go version
go env
重点看:
GOROOT:Go 安装路径GOPATHGOOS / GOARCH:交叉编译相关CGO_ENABLED✅ 正常示例:
GOOS=linux
GOARCH=amd64
CGO_ENABLED=1 或 0
在打包前,先直接编译:
go build -v ./...
如果这里就报错,先不要管打包问题,先把编译错误解决。
go clean -cache
go build
CGO 相关错误(最常见)cgo: C compiler "gcc" not found
import "C"sqlite, grpc, crypto)安装 gcc:
sudo apt update
sudo apt install gcc
如果是 64 位:
sudo apt install gcc-x86-64-linux-gnu
GOOS=windows GOARCH=amd64 go build
go build: unsupported GOOS/GOARCH pair
✅ 解决办法:
| GOOS | GOARCH |
|---|---|
| linux | amd64 |
| windows | amd64 |
| darwin | arm64 |
查看支持:
go tool dist list
go build -ldflags="-s -w"
或使用:
upx your_binary
go.mod / go.sum 错误missing go.sum entry
或
go.mod not found
go mod tidy
go mod download
如果是拉取私有仓库:
git config --global url."git@github.com:".insteadOf "https://github.com/"
permission denied
chmod +x your_binary
或避免输出到系统目录:
go build -o ./app
Ubuntu apt 里的 Go 通常很旧。
apt show golang
wget https://go.dev/dl/go1.22.4.linux-amd64.tar.gz
sudo rm -rf /usr/local/go
sudo tar -C /usr/local -xzf go1.22.4.linux-amd64.tar.gz
配置环境变量(~/.bashrc):
export PATH=$PATH:/usr/local/go/bin
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-s -w" -o app
go build -ldflags "-X main.Version=1.0.0" -o app
我可以直接帮你定位,请贴出:
lsb_release -a
go version
如果你愿意,也可以告诉我:
我可以直接给你一条“能跑”的命令 ✅