Ubuntu 上 Golang 打包失败的原因很多,下面按常见场景 + 对应报错/现象 + 解决办法给你梳理一下,你可以对照看看是哪一种。
现象
go: github.com/xxx: dial tcp: i/o timeout
go mod download failed
原因
解决
go env -w GOPROXY=https://goproxy.cn,direct
go env -w GO111MODULE=on
然后再:
go mod tidy
go build
现象
go: requires go >= 1.20
unknown field XXX in go.mod
解决
go version
Ubuntu 自带的可能很旧(1.13 / 1.15):
sudo rm -rf /usr/local/go
wget https://go.dev/dl/go1.22.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.22.linux-amd64.tar.gz
并确保:
export PATH=$PATH:/usr/local/go/bin
现象
cgo: C compiler "gcc" not found
undefined reference to `xxx`
原因
sqlite、leveldb、openssl 等 C 库解决
sudo apt update
sudo apt install -y gcc libc-dev
如果不想用 CGO:
CGO_ENABLED=0 go build
现象
GOOS=windows go build
# 报错缺少头文件
解决
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build
现象
missing go.sum entry
inconsistent vendoring
解决
rm -rf go.sum
go mod tidy
go build
或:
go mod verify
现象
permission denied
cannot write to /usr/local/go
解决
现象
exec format error
原因
解决
go env GOARCH
uname -m
# 1. 安装依赖
sudo apt update
sudo apt install -y gcc git
# 2. 设置环境
go env -w GOPROXY=https://goproxy.cn,direct
go env -w GO111MODULE=on
# 3. 构建
CGO_ENABLED=0 go build -o app main.go
你可以直接贴出:
go versiongo env我可以直接告诉你是哪一行导致失败。