因为go模块下载优先走goproxy代理(返回.zip包),不触发git命令,故git config的insteadof无效;仅当代理失效fallback到git时才生效,且仅对https有效、对ssh/git协议无效。

为什么 git config --global url."https://github.com/".insteadOf "https://github.com/" 没用?
因为 Go 的模块下载不走 Git 全局配置的 insteadOf,而是依赖 git 命令本身的行为,以及 Go 自己的代理机制。你改了 Git 配置,go mod download 仍可能卡在 github.com 域名解析或连接超时上——它压根没调用你配的重写规则。
真正起效的是让 Go 在发起 HTTP 请求前就替换源地址,或者绕过 Git 协议直走 HTTPS + 缓存代理。
- Go 1.13+ 默认启用
GOPROXY,优先从代理拉取 module zip,不触发git clone - 只有当 proxy 返回 404 或禁用 proxy 时,Go 才 fallback 到
vcs(Git/SVN)方式,此时才受 Git 配置影响 -
insteadOf对https://有效,但对git://或ssh://无效;而某些模块的go.mod里写的是git@github.com:这种 SSH 地址,Git 配置根本不会处理
设置 GOPROXY 是最直接有效的加速方式
Go 模块代理返回的是预构建的 .zip 包和 mod 文件,完全跳过 Git 克隆、检出、解析 commit 等耗时环节。国内可用的公开代理如 https://goproxy.cn、https://proxy.golang.org(需科学上网)。
执行以下命令即可生效:
go env -w GOPROXY=https://goproxy.cn,direct go env -w GOSUMDB=off
-
direct表示对私有域名(如公司内网模块)不走代理,直接拉取 -
GOSUMDB=off关闭校验(仅开发/内网环境),避免因无法访问sum.golang.org导致下载失败 - 如果私有模块托管在 GitLab 或自建 Harbor,可加白名单:
GOPROXY=https://goproxy.cn,https://proxy.golang.org,direct,Go 会按顺序尝试
私有模块仍走 Git?那就得动 git config 和 ~/.netrc
当模块路径匹配 example.com/internal/lib 这类私有域名,且未被 GOPROXY 覆盖时,Go 会调用 git ls-remote 查询 tag,再 git clone。此时网络慢、认证失败、SSH key 不匹配都会卡住。
关键不是改 insteadOf,而是确保 Git 能快速、免密访问:
- 用 HTTPS 替代 SSH:把
git@xxx.com:repo.git改成https://xxx.com/repo.git,并在~/.netrc中存凭据:machine xxx.com login your_user password your_token - 关闭 Git 的 SSL 验证(仅测试环境):
git config --global http.sslVerify false - 限制 Git 深度(Go 只需 latest commit):
git config --global clone.defaultRemote origin,并确认远程仓库支持git ls-remote --tags
注意:~/.netrc 权限必须是 600,否则 Git 忽略它。
别忽略 go mod download -x 输出里的真实瓶颈
运行 go mod download -x 能看到每一步执行的命令和耗时。常见卡点不是“下载慢”,而是:
-
git ls-remote https://github.com/user/repo—— DNS 解析失败或 TLS 握手超时 -
git clone --no-checkout --depth=1 https://github.com/user/repo /tmp/xxx—— Git 服务限速或大仓库 shallow clone 失败 -
go list -m -json卡住 —— 某个间接依赖的go.mod里写了不可达的 replace 或 retract
这时候改 Git 配置或换代理都没用,得去查那个具体模块的源是否真的可访问、go.mod 是否语法错误、是否被 GitHub 私有化后未授权。
加速的本质不是“让 Git 更快”,而是让 Go 尽量少走 Git。能走 GOPROXY 就别让它碰 git;非走不可时,确保 Git 的网络路径干净、认证可靠、协议简单。











