GO_PROXY必须以斜杠结尾,否则路径拼接错误导致404;需安装nexus-golang-plugin、选用golang (proxy)仓库类型、关闭Strict Content Validation,并配合GOPRIVATE与NO_PROXY处理私有模块。

GO_PROXY 必须带末尾斜杠,否则 404
Go 客户端拼接模块路径时不做任何规范化处理,GO_PROXY 值缺末尾斜杠,就会把 github.com/go-yaml/yaml/@v/v1.2.3.info 错拼成 http://localhost:8081/repository/golang-proxygithub.com/,直接返回 404。这不是 Nexus 配置错,是 Go 的硬规则。
实操建议:
立即学习“go语言免费学习笔记(深入)”;
- 确认 Nexus 中仓库的 “Public URL” 显示为
http://localhost:8081/repository/golang-proxy/(结尾必须有斜杠) - 设置环境变量严格写成:
export GO_PROXY="http://localhost:8081/repository/golang-proxy/" - 用
curl -I "$GO_PROXY/github.com/gorilla/mux/@v/list"手动验证是否返回200 OK和正确Content-Type
必须装 nexus-golang-plugin,否则仓库类型不可选
Nexus OSS 3.x 默认不带 Go 支持,golang (proxy) 仓库类型根本不会出现在创建列表里。没装插件,后面所有配置都白搭。
实操建议:
立即学习“go语言免费学习笔记(深入)”;
- 下载对应 Nexus 版本的
nexus-golang-plugin-*.jar(注意版本兼容性) - 放入
$NEXUS_HOME/deploy/目录,重启 Nexus - 重启后进入
Repository → Create repository,才会有golang (proxy)类型可选 - 新建时务必勾选
Disable Strict Content Validation,否则某些模块因校验头失败被拒
私有模块必须配 GOPRIVATE + NO_PROXY,只设 GO_PROXY 不够
只设 GO_PROXY,Go 仍会把 gitlab.company.com/mylib 这类地址发给代理,结果要么 404,要么超时卡住。必须明确告诉 Go:“这个前缀跳过代理,直连 Git”。
实操建议:
立即学习“go语言免费学习笔记(深入)”;
-
export GOPRIVATE="gitlab.company.com,bitbucket.internal"(逗号分隔,不带协议) -
export NO_PROXY="gitlab.company.com,bitbucket.internal"(确保 net/http 层也绕过) - 避免使用
golang-group类型仓库——它不响应@v/路径,纯属干扰项 - 如果私有 Git 用自签名证书,还需加
GOINSECURE=gitlab.company.com或把 CA 加入系统信任链
go.mod 中 replace 是临时开发手段,别提交到主干
replace 指向本地路径(如 replace git.example.com/internal/utils => ./internal/utils)仅适合本地调试。CI 构建时若未设 GOPRIVATE,go mod download 会去公共代理查模块,直接失败。
实操建议:
立即学习“go语言免费学习笔记(深入)”;
- 开发期可用
replace加速验证,但提交前务必注释掉或删除 - 私有模块变更未打 tag 时,别依赖
master或latest—— Go 不支持分支名作为版本;改用伪版本(如v0.0.0-20240520123456-abcdef123456)或打轻量 tag -
indirect出现在go.mod里,只要其路径匹配GOPRIVATE,Go 就会按私有规则解析,无需额外操作
golang (proxy) 仓库必须启用且暴露正确 URL,而 GOPRIVATE 和 NO_PROXY 必须严格一致 —— 域名拼写、大小写、是否带端口,差一个字符就可能让模块拉取 fallback 到代理或失败。


















