温馨提示×

为什么ubuntu编译golang慢

小樊
39
2026-09-28 13:10:02
栏目: 编程语言

在 Ubuntu 上编译 Go 程序“慢”,通常不是 Go 语言本身的问题,而是环境、配置或项目结构导致的。下面按常见原因给你梳理一下,并给出对应解决办法。


一、最常见原因

1. 没有开启 Go 模块缓存 / 重复下载依赖

如果你每次编译都:

  • 重新 go mod download
  • 或在无网络/代理环境下

就会非常慢。

✅ 解决:

go env -w GOPROXY=https://proxy.golang.org,direct
go env -w GOFLAGS=-mod=mod

并确保:

echo $GOPATH
# 默认 ~/go

缓存目录不要频繁删除。


2. 使用了 go build 而不是增量编译

Go 本身支持增量编译,但以下情况会“假装很慢”:

  • 每次 rm -rf 再编译
  • CI 环境没有缓存
  • Docker 里每次都从头构建

✅ 解决:

  • 不要每次清理 $GOCACHE
  • Docker 中用多阶段构建 + 缓存层

3. 机器性能 / 资源限制

Ubuntu 上常见:

  • 虚拟机(VMware / VirtualBox)CPU 核数少
  • 内存不足导致 swap
  • WSL1(非常慢)

✅ 检查:

nproc
free -h

✅ 建议:

  • 使用 WSL2(不是 WSL1)
  • 至少 2–4 核、4G 内存

4. 编译时启用了不必要的东西

比如:

go build -race
go test -race
CGO_ENABLED=1

这些都会显著变慢。

✅ 正常编译:

CGO_ENABLED=0 go build

5. 项目依赖太大 / 包太多

  • Kubernetes 类项目
  • 微服务聚合仓库
  • 大量 generated code(protobuf / openapi)

✅ 优化:

  • 拆分 module
  • 减少 import 层级
  • 避免“超级 main 包”

6. 磁盘 IO 慢(HDD / 加密盘)

Go 编译是 IO 密集型。

✅ 检查:

df -T

如果是:

  • HDD
  • LUKS 加密
  • 网络盘(NFS)

都会明显慢。


二、如何判断是否“真的慢”

对比测试:

time go build

小项目(几 MB):

  • 正常:1–3 秒
  • 慢:10 秒以上 ❌

大项目(K8s 级):

  • 正常:几十秒
  • 慢:几分钟 ❌

三、Ubuntu 特有问题

WSL1(⚠️ 最常见)

WSL1 跑 Go 编译:灾难级慢

✅ 解决:

wsl --set-version Ubuntu 2

杀毒 / 索引工具

Ubuntu 上:

  • baloo
  • tracker
  • 企业杀毒

会扫描 .go 文件。

✅ 解决:

  • 排除 GOPATH / 项目目录

四、快速自检清单 ✅

go version
nproc
free -h
go env GOPATH GOCACHE

如果你的项目:

  • 在 WSL1 ❌
  • 每次 rm 缓存 ❌
  • 启用了 -race ❌
  • 用的是 HDD ❌

那“慢”是正常的。


如果你愿意,可以告诉我:

  • Ubuntu 版本
  • 是否 WSL
  • 项目大小 / 是否微服务
  • go build 具体命令

我可以直接帮你定位是哪一类问题。

0 踩