在Debian系统上折腾Golang编译时,速度往往是个让人头疼的问题。跑个大型项目,动辄几十秒甚至几分钟,简直磨人。不过别担心,只要从几个关键点下手,就能让编译过程飞快起来。下面这几招,都是实战中总结出来的,照着来准没错。

先把基础工具装齐活了
编译Go程序,离不开最基础的编译环境和版本管理工具。build-essential和git这两样,堪称标配。直接一条命令搞定:sudo apt-get update sudo apt-get install build-essential git环境变量调一调,效率翻倍
有些环境变量对编译速度影响不小。比如,可以设置GOROOT_BOOTSTRAP指向你的Go安装目录,再关掉CGO_ENABLED=0(前提是你的项目不需要C语言绑定),这样能省掉不少麻烦。建议在启动编译前先 export 一下:export GOROOT_BOOTSTRAP=$(go env GOROOT) export GOTOOLDIR=$GOROOT_BOOTSTRAP/pkg/tool/linux_amd64 export CGO_ENABLED=0用上Go Modules,依赖管理更清爽
从Go 1.11起,模块机制成了官方推荐。开启后,依赖的版本控制、下载缓存都自动搞定,编译时也不会因为路径问题卡住。顺手开一下:export GO111MODULE=on充分利用CPU多核,并行编译
Go编译器天生支持并行。想让它用满所有核心?设置GOMAXPROCS为CPU核心数即可。用nproc命令自动获取最佳值:export GOMAXPROCS=$(nproc)别小看缓存的力量
Go编译器会自动缓存中间文件,下次编译时直接复用,能省下大量重复劳动。只要确保你的构建目录下有.cache文件夹(通常是~/.cache/go-build),缓存机制就会自动生效。别手痒去清理它,除非真遇到了问题。用
go install代替重复编译
如果你的程序已经调试好了,不妨试试go install。它会把编译好的二进制文件安装到$GOPATH/bin下,后续运行直接调用二进制,再也不需要重走编译流程。省时又省心。CGO优化别忽略
如果项目里用了C语言库(比如调用了某些系统库),那C编译器本身的优化也不能放过。通过CGO_CFLAGS和CGO_LDFLAGS把GCC的优化级别调高,比如-O2甚至-O3,能让C部分的编译也快上一截:export CGO_CFLAGS="-O2" export CGO_LDFLAGS="-O2"
把这些招数挨个用上,Deiban下的Go编译速度绝对能给你惊喜。当然,具体效果还跟项目大小、硬件配置有关,但方向对了,优化就不是玄学。