在 Ubuntu 上用 Go 编译“卡住”是比较常见的问题,通常不是真的死机,而是阻塞在某个环节。下面按常见原因 → 排查方法 → 解决办法来说明。
Go 在编译时如果缺少 module,会自动去拉取:
go build
go mod download
如果网络访问 proxy.golang.org 或 github.com 慢/被墙,就会“看起来卡住”。
✅ 排查:
go env GOPROXY
✅ 解决(国内推荐):
go env -w GOPROXY=https://goproxy.cn,direct
或临时:
GOPROXY=https://goproxy.cn,direct go build
如果用了 C 代码(比如 sqlite、opencv):
import "C"
会调用 gcc,如果 gcc 很慢或死循环,会卡住。
✅ 排查:
ps aux | grep gcc
✅ 解决:
CGO_ENABLED=0 go build
✅ 排查:
df -h
iotop
✅ 解决:
/mnt, /media 编译Go 编译会吃内存,内存不够会 swap,看起来像卡死。
✅ 排查:
free -h
top
✅ 解决:
go build -p 2
或减少并行:
GOMAXPROCS=2 go build
如果是:
go run main.go
“卡住”其实是程序在跑,不是编译。
✅ 排查:
go run -race main.go
或加日志看是否在 init()、main() 里阻塞。
go build -x
会打印每一步命令。
go build -v
go env
重点看:
# 1. 看网络
go env -w GOPROXY=https://goproxy.cn,direct
# 2. 清缓存
go clean -modcache
# 3. 重新拉依赖
go mod download
# 4. 编译
go build -x
你可以把下面信息发我,我能精准判断:
go version)go build -x 最后几行输出我可以直接告诉你卡在哪一行。