go111module必须设为on,否则模块模式不启用;goproxy需配置为https://goproxy.cn,direct以解决国内依赖拉取失败;gomodcache决定缓存位置,可通过go clean -modcache清理。

Go 模块依赖管理不靠环境变量驱动,但 GO111MODULE、GOMODCACHE 和 GOPROXY 这三个变量直接决定依赖能否拉下来、拉哪来的、缓存在哪——配错一个,go build 就卡在 Fetching 或报 no required module provides package。
GO111MODULE 必须设为 on,auto 是陷阱
很多人留着默认的 auto,以为“有 go.mod 就自动启用”,结果在项目外执行 go run main.go 或误入子目录时,Go 会退回到 GOPATH 模式,找不到模块依赖。
-
GO111MODULE=on强制只认go.mod,无视$GOPATH/src,这是现代项目的唯一安全模式 -
GO111MODULE=off仅用于维护极老项目,新代码绝对不要开 - 验证方式:运行
go env GO111MODULE,输出必须是on,不是空值或auto - Linux/macOS 写进
~/.zshrc:export GO111MODULE=on;Windows 在系统环境变量里设同名变量
GOPROXY 决定依赖从哪下载,国内必须配
默认 GOPROXY=https://proxy.golang.org,direct 在国内基本不可用,go get 会超时或 403,不是网络问题,是代理不可达。
在 Golang 中使用 samber/hot 进行内存缓存,支持 LRU、LFU、TinyLFU、W‑TinyLFU、S3FIFO、ARC、TwoQueue、SIEVE、FIFO 等淘汰算法,提供 TTL、缓存加载器及分片功能。
- 推荐配置:
export GOPROXY=https://goproxy.cn,direct(国内稳定)或https://proxy.golang.com.cn,direct(官方国内镜像) -
direct表示当代理无法提供某模块时,回退到直接从源仓库拉(需 git 可达),不能删 - 如果公司有私有模块仓库,加在
direct前,如:https://goproxy.cn,https://your-company.com/go,direct - 临时覆盖(单次命令):
GOPROXY=https://goproxy.cn go get github.com/sirupsen/logrus
GOMODCACHE 控制依赖缓存位置,别让它塞满系统盘
go mod download 默认把所有依赖解压存进 $GOPATH/pkg/mod,长期不用清理会占几十 GB。你没法删整个目录,但可以迁走或定期清。
- 查看当前路径:
go env GOMODCACHE - 想换位置(比如 SSD 空间紧张):
export GOMODCACHE=/data/go/pkg/mod,确保目录可写 - 清理未使用的模块:
go clean -modcache(注意:这会清空整个缓存,下次构建要重下) - 只清理不被当前项目引用的模块:
go mod vendor && go clean -modcache不行——go clean -modcache没这个粒度,真要精准清理得靠脚本或手动删cache/下非cache/download/的子目录
PATH 和 GOPATH/bin 影响的是工具链,不是依赖本身
依赖管理本身不依赖 PATH,但 go install 安装的工具(如 gopls、gotestsum)必须能在 shell 找到,否则 IDE 报 “command not found” 或调试器启动失败。
-
$GOROOT/bin放go、gofmt等核心命令,必须在PATH中 -
$GOPATH/bin放go install输出的二进制,强烈建议也加进PATH,否则gopls启动不了 - Windows 用户注意:
Path变量里必须用英文分号;分隔,不能换行、不能有中文标点、不能有多余空格 - VS Code 启动方式影响环境继承:桌面图标启动不读
.zshrc,要用终端执行code .打开项目
最常被忽略的其实是 GOPROXY 配了但没生效——因为 shell 没重载,或者 IDE 启动时根本没读到它。每次改完环境变量,别只信 echo $GOPROXY,一定要跑 go env GOPROXY 和 go list -m all 实测一次。
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!










