go env goproxy 显示空值或未生效?先查当前真实值——运行 go env goproxy 是唯一可信判断依据;linux/macos 需 source ~/.zshrc,windows powershell 设 $env:goproxy 后必须重启终端,ide 缓存旧值需重启并执行 go clean -modcache;代理链中 direct 必须小写、置末尾且无空格,如 https://goproxy.cn,direct。

go env GOPROXY 显示空值或未生效?先查当前真实值
改完环境变量却还是走 proxy.golang.org,大概率是没真正生效。别只改配置文件就以为完事——go env GOPROXY 才是唯一可信的判断依据。
Linux/macOS 用户常漏掉 source ~/.zshrc;Windows PowerShell 用户设了 $env:GOPROXY 但没重启终端,结果只在当前会话有效。IDE(如 GoLand、VSCode)还可能缓存旧值,改完建议执行 go clean -modcache 并重启编辑器。
GOPROXY 链中 direct 必须放在末尾,否则直连优先级反超代理
Go 的代理链是顺序尝试机制:遇到 404 或 5xx 就 fallback 到下一个。但 direct 不是“备用代理”,而是“绕过代理直连源站”。如果写成 GOPROXY=direct,https://goproxy.cn,所有请求先直连,超时后才走镜像,反而更慢甚至失败。
- 正确写法:
export GOPROXY=https://goproxy.cn,https://proxy.golang.org,direct -
direct必须小写、无协议前缀、逗号后不能有空格 - 国内推荐组合:
https://mirrors.tuna.tsinghua.edu.cn/goproxy/,https://goproxy.cn,direct(清华响应快,goproxy.cn 兼容性好)
私有模块拉不到?GOPRIVATE + GONOSUMDB + git URL 重写三者缺一不可
仅设 GOPROXY 对私有模块无效。Go 工具链默认仍会尝试转发请求到公共代理,导致 404 或暴露内网地址。必须显式声明哪些路径跳过代理和校验:
-
GOPRIVATE=gitlab.example.com/*,github.com/my-org/*:匹配路径不走代理、不查sum.golang.org -
GONOSUMDB=gitlab.example.com/*:跳过 checksum 校验(私有库无官方校验记录) - 若用 SSH 地址(
git@gitlab.example.com:group/repo.git),还需git config --global url."git@gitlab.example.com:".insteadOf "https://gitlab.example.com/",否则 Go 默认发 HTTPS 请求并卡在认证
Nexus 搭建 Golang 代理仓库时,URL 末尾斜杠不能省
配 Nexus 做私有代理最常踩的坑:URL 写成 http://localhost:8081/repository/golang-proxy(缺斜杠),结果 Go 客户端拼路径时变成 .../golang-proxygithub.com/,直接 404。
必须确认 Nexus 中该仓库的 Public URL 是以 / 结尾的完整地址,且类型是 golang (proxy)(不是 golang-group);插件 nexus-golang-plugin 也得提前装好,否则新建仓库时根本看不到这个类型选项。
另外,若 Nexus 启用了 Realm 认证,Go 默认不带凭据访问,需配合 ~/.netrc 或 git credential 配置,否则返回 401。
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!











