在 Ubuntu 下使用 Golang 打包(如 go build / go install / go test)感觉“慢”,通常不是单个原因,而是多个因素叠加。下面按最常见 → 较少见的顺序说明,并给出对应解决办法。
第一次构建时:
$GOPATH/pkg/mod 和 build cache✅ 表现:
✅ 解决:
go env -w GOPROXY=https://proxy.golang.org,direct
go clean -cache
go build
如:
clamav$GOPATH✅ 表现:
✅ 解决:
# 临时停止
sudo systemctl stop clamav-freshclam
Go 编译会:
✅ 表现:
iostat 中 %util 很高✅ 解决:
GOCACHE 放到 tmpfs:go env -w GOCACHE=/tmp/gocache
如果项目或依赖用了:
sqliteopensslgrpc 的某些实现✅ 表现:
gcc✅ 检查:
go env CGO_ENABLED
✅ 关闭(如不需要):
CGO_ENABLED=0 go build
Go 默认使用所有 CPU:
go env GOMAXPROCS
但以下情况会慢:
ulimit✅ 检查:
nproc
go build -p 4 .
在:
编译会变慢。
✅ 解决:
✅ 表现:
free -h 看到 swap 使用✅ 解决:
sudo swapoff -a
# 或加内存
Go 不会像 Java 那样“只编译改动的类”:
✅ 正常表现:
# 1. 看编译时间
time go build
# 2. 看是否在用 cache
go build -x 2>&1 | grep cache
# 3. 看 CPU / IO
top
iostat -x 1
你可以贴出:
go versiongo build -x 的输出片段我可以帮你精确定位是哪一步慢。