温馨提示×

ubuntu golang编译为何卡住

小樊
34
2026-10-10 06:38:04
栏目: 编程语言

在 Ubuntu 上用 Go 编译“卡住”是比较常见的问题,通常不是真的死机,而是阻塞在某个环节。下面按常见原因 → 排查方法 → 解决办法来说明。


一、最常见原因

1️⃣ 下载依赖卡住(最常见)

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

2️⃣ cgo 编译卡住

如果用了 C 代码(比如 sqlite、opencv):

import "C"

会调用 gcc,如果 gcc 很慢或死循环,会卡住。

✅ 排查:

ps aux | grep gcc

✅ 解决:

  • 确保 gcc 安装正常
  • 或临时关闭 cgo:
CGO_ENABLED=0 go build

3️⃣ 磁盘 / IO 问题

  • 硬盘满了
  • 在 NFS / 网络盘编译
  • 杀毒软件 / index 工具扫描

✅ 排查:

df -h
iotop

✅ 解决:

  • 不要在 /mnt, /media 编译
  • 用本地 SSD

4️⃣ 编译超大项目 / 内存不足

Go 编译会吃内存,内存不够会 swap,看起来像卡死。

✅ 排查:

free -h
top

✅ 解决:

go build -p 2

或减少并行:

GOMAXPROCS=2 go build

5️⃣ 死锁 / init 中阻塞(运行阶段)

如果是:

go run main.go

“卡住”其实是程序在跑,不是编译。

✅ 排查:

go run -race main.go

或加日志看是否在 init()、main() 里阻塞。


二、快速定位“卡在哪一步”

✅ 看详细日志

go build -x

会打印每一步命令。


✅ 看是否在下载

go build -v

✅ 看环境变量

go env

重点看:

  • GOPROXY
  • GOFLAGS
  • GOMODCACHE
  • CGO_ENABLED

三、一个“标准排查流程”

# 1. 看网络
go env -w GOPROXY=https://goproxy.cn,direct

# 2. 清缓存
go clean -modcache

# 3. 重新拉依赖
go mod download

# 4. 编译
go build -x

四、如果你愿意

你可以把下面信息发我,我能精准判断:

  1. Ubuntu 版本
  2. Go 版本(go version)
  3. 卡住时执行的命令
  4. 是否用 cgo
  5. go build -x 最后几行输出

我可以直接告诉你卡在哪一行。

0 踩