温馨提示×

ubuntu编译golang慢怎么回事

小樊
42
2026-10-04 09:58:44
栏目: 编程语言

在 Ubuntu 上编译 Go 程序“很慢”,通常不是 Go 本身的问题,而是环境或配置导致的。下面按最常见原因 → 排查方法 → 解决建议给你梳理一下。


一、最常见原因

1️⃣ 开启了杀毒 / 安全软件扫描(重点)

Ubuntu 上如果是 企业环境,很可能装了:

  • ClamAV
  • Sophos
  • 自定义 inotify 扫描脚本

现象

  • go build 时 CPU 不高
  • 磁盘 IO 很高
  • 编译一个简单程序都要几十秒

✅ 解决:

# 临时关闭 ClamAV
sudo systemctl stop clamav-freshclam
sudo systemctl stop clamav-daemon

或者把 Go 工作目录加入白名单。


2️⃣ 项目在机械硬盘 / 网络盘 / WSL 挂载盘

  • /mnt/c(WSL)
  • NFS
  • 老机械硬盘

Go 编译会大量读写:

  • $GOPATH/pkg
  • 临时文件

✅ 解决:

  • 把项目放到 本地 SSD
  • WSL 用户目录(~/project),别用 /mnt

3️⃣ Go 模块代理慢(国内尤其明显)

默认:

GOPROXY=https://proxy.golang.org

✅ 解决(国内推荐):

go env -w GOPROXY=https://goproxy.cn,direct

测试:

go env GOPROXY

4️⃣ 没有利用编译缓存

Go 本身很快,是因为有缓存。

检查:

go env GOCACHE

如果:

  • GOCACHE 在慢盘
  • 每次都被清掉

就会非常慢。

✅ 解决:

go env -w GOCACHE=$HOME/.cache/go-build

5️⃣ CGO 被启用(编译 C 代码)

只要用了:

  • net
  • sqlite
  • 某些 crypto

就可能触发 CGO。

检查:

go env CGO_ENABLED

如果是 1,且你不需要 C:

CGO_ENABLED=0 go build

6️⃣ 机器资源不足

  • 内存太小(< 2G)
  • CPU 核心少
  • 开了很多后台服务

查看:

nproc
free -h
top

二、快速自检清单(30 秒)

go env GOPROXY GOCACHE CGO_ENABLED
nproc
df -h .

三、典型“慢”的正常范围

项目规模 正常编译时间
小项目 < 2s
中型 5–15s
大型 30–60s

如果明显超出,基本是环境问题。


四、如果你愿意

你可以直接贴:

  • Ubuntu 版本
  • Go 版本(go version)
  • 项目大小 / 是否 WSL
  • go build -x 卡在哪一步

我可以帮你精确定位是哪一块拖慢的。

0 踩