go modules国内需配置goproxy为https://goproxy.cn,direct并启用go111module=on,同时通过gonoproxy处理私有模块,重启gopls确保生效。

Go Modules 默认走 proxy.golang.org,国内直连基本超时,必须配置 GOPROXY 才能正常下载依赖。
确认 Go 版本并启用 Modules
Go 1.11+ 支持 Modules,但默认未强制启用;1.13+ 起 GOPROXY 默认值才生效。先检查版本:
go version
确保已设置 GO111MODULE=on(推荐全局开启):
- Linux/macOS:在
~/.bashrc或~/.zshrc中添加export GO111MODULE=on - Windows(CMD):运行
setx GO111MODULE on(需重启终端) - VSCode 中若仍不识别,可在工作区设置里加:
"go.toolsEnvVars": {"GO111MODULE": "on"}
配置国内 GOPROXY 解决超时
官方 proxy 在国内不稳定,直接设为七牛云或阿里云镜像最可靠。优先用 https://goproxy.cn(七牛),它支持校验、缓存完整、响应快:
- 临时生效(当前终端):
go env -w GOPROXY=https://goproxy.cn,direct - 永久生效(推荐):在 VSCode 的用户设置中添加:
"go.toolsEnvVars": {"GOPROXY": "https://goproxy.cn,direct"} - 注意末尾的
direct—— 它表示对私有仓库(如公司内网 Git)跳过代理,否则内部包会 404 - 不要用
https://mirrors.aliyun.com/goproxy/,它不支持/@v/v0.1.0.info等语义化路由,某些工具(如gopls)会报错
VSCode 中 gopls 和依赖索引失效怎么办
gopls 是 VSCode Go 插件的后台语言服务器,它依赖正确的 GOPROXY 和模块路径才能解析依赖。常见表现是“找不到包”“跳转失败”“hover 显示 no package”:
- 重启
gopls:Cmd/Ctrl + Shift + P → 输入Go: Restart Language Server - 确认当前工作目录是 module 根目录(含
go.mod),否则gopls会退化为 GOPATH 模式 - 如果仍提示
no required module provides package,执行go mod tidy强制同步go.mod和go.sum - 禁用
go.useLanguageServer不是解法——它只会让问题更隐蔽
私有模块和 git 认证绕过代理
公司内部 GitLab 或 GitHub 私有库不能走公共代理,否则 403 或 404。必须靠 replace 或 GONOPROXY 控制:
- 在
go.mod中显式替换:replace example.com/internal => ./internal(本地路径)或replace example.com/internal => git@example.com/internal.git v1.2.3(远程) - 或设环境变量:
go env -w GONOPROXY="example.com/internal,git.corp.company",多个用逗号分隔 -
GONOPROXY优先级高于GOPROXY,且支持通配符(如*.corp.company),但注意通配符只匹配子域名,不匹配路径
真正卡住的往往不是配置本身,而是 gopls 缓存了旧的环境变量或没读到 go.mod 变更——改完记得重启语言服务,再盯一眼终端里 go env | grep -i proxy 的输出是否真生效。











