通过编译器选项减少编译时间和二进制文件大小:
-c:仅编译不链接,适合需要多次编译的场景(如测试单个包);-s:去除调试符号(如文件名、行号),减小编译后文件大小;-p:设置并行编译的goroutine数量(默认为CPU核心数,如-p 4可手动调整);-ldflags="-w -s":去除DWARF调试信息和符号表,进一步减小编译后文件(如将2MB的二进制文件减至1.5MB)。Go 1.10+内置构建缓存,合理配置可避免重复编译:
go env GOCACHE查看缓存目录(通常为~/.cache/go-build);export GOCACHE=/mnt/ssd/go-cache),提升读写速度;GOCACHE和GOMODCACHE(~/go/pkg/mod),避免每次构建重新下载依赖。减少编译范围和时间:
utils包)拆分为多个小包(如utils/string、utils/file),缩小编译单元;go mod vendor:将依赖项复制到项目vendor目录,避免每次编译都从远程仓库下载依赖(适合离线或网络不稳定环境)。提升硬件性能直接加快编译速度:
减少依赖带来的编译开销:
go.mod中的require指令固定依赖版本(如github.com/gin-gonic/gin v1.9.1),避免go get -u自动升级导致缓存失效;go mod tidy移除未使用的依赖,减少编译时的处理量;gomodproxy(国内可使用https://goproxy.cn),加速依赖下载(但需注意缓存依赖以减少重复下载)。在自动化流程中提升编译效率:
GOCACHE和GOMODCACHE,例如:- uses: actions/cache@v3
with:
path: |
~/.cache/go-build
~/go/pkg/mod
key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}-${{ matrix.go-version }}
go mod download),第二阶段复制源代码并编译,利用Docker层缓存避免重复下载依赖。