在 Ubuntu 上用 Go 编译慢,通常可以从项目本身、Go 环境、系统资源、依赖管理几个方向来优化。下面按「最常见的 → 进阶的」给你一套实用方案。
time go build ./...
go build -x ./...
如果看到大量 compile 重复执行,说明缓存没生效。
Go 1.10+ 默认有缓存,但有时被关了:
go env GOCACHE
如果为空或异常:
go env -w GOCACHE=$HOME/.cache/go-build
✅ 确保:
GOCACHE 在本地 SSD❌ 慢:
/mnt/nas/project
✅ 快:
~/project
Go 默认用所有 CPU:
go env GOMAXPROCS
如果你 CPU 核心很多但内存小,反而会慢:
export GOMAXPROCS=4
go env GOPATH
确保:
$GOPATH/pkg/mod
在本地磁盘。
清理无效缓存(谨慎):
go clean -modcache
常见问题:
google.golang.org/grpc 却只用一小部分import _ "xxx" 很多副作用包检查:
go mod tidy
go build -trimpathgo build -trimpath ./...
避免路径变化导致缓存失效。
编译 Go 很吃:
建议:
Ubuntu 上常见拖慢原因:
clamav临时关闭测试:
systemctl stop clamav-freshclam
如果你在 WSL2 + Windows 文件系统:
/mnt/c/...
❌ 极慢
✅ 正确做法:
~/go/src/...
用多阶段 + 缓存:
FROM golang:1.22 AS build
WORKDIR /app
COPY go.mod ./
RUN go mod download
COPY . .
RUN go build -o app
gomobile / staticcheck 少跑CI 里避免:
go vetstaticcheckbazel / mage(大项目)超大单体项目可考虑:
go env GOCACHE GOPATH GOMAXPROCS
go mod tidy
time go build ./...
如果你愿意,可以告诉我:
我可以直接帮你定位是哪一类问题。