go_proxy必须以斜杠结尾,否则路径拼接错误导致404;需安装nexus-golang-plugin、选用golang (proxy)仓库类型、关闭strict content validation,并配合go_private与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 的硬规则。
实操建议:
- 确认 Nexus 中仓库的 “Public URL” 显示为
http://localhost:8081/repository/golang-proxy/(结尾必须有/) - 设置环境变量时严格写成:
export GO_PROXY="http://localhost:8081/repository/golang-proxy/" - 别用
golang-group类型仓库——它不响应@v/路径,纯属干扰项 - 用
curl -I "$GO_PROXY/github.com/gorilla/mux/@v/list"手动验证是否返回200 OK和正确 Content-Type
nexus-golang-plugin 是刚需,不是可选
Nexus OSS 3.x 默认不带 Go 支持,golang (proxy) 仓库类型根本不会出现在创建列表里。没装插件,后面所有配置都白搭。
实操建议:
- 下载对应 Nexus 版本的
nexus-golang-plugin-*.jar(注意版本兼容性) - 放入
$NEXUS_HOME/deploy/目录,重启 Nexus - 重启后进入
Repository → Create repository,才会有golang (proxy)类型可选 - 新建仓库时选该类型,并勾选
Disable Strict Content Validation,否则某些模块会因校验头失败被拒
私有模块必须配 GO_PRIVATE + NO_PROXY
只设 GO_PROXY,Go 仍会把 gitlab.company.com/mylib 这类地址发给代理,结果要么 404,要么超时卡住。必须明确告诉 Go:“这个前缀跳过代理,直连 Git”。
实操建议:
-
export GO_PRIVATE="gitlab.company.com,bitbucket.internal"(逗号分隔,不带协议) -
export NO_PROXY="gitlab.company.com,bitbucket.internal"(同上,确保 net/http 层也绕过) - 如果 Nexus 启用了 Realm 认证,还需配
.netrc或git config --global credential.helper store,否则go get会卡在 401 - 模块名必须与 Git 地址完全一致:
go mod init gitlab.company.com/team/utils,否则拉取时路径匹配失败
go mod download 报 invalid version?先看响应体是不是 HTML
常见错误:go list -m all 报 invalid version: unknown revision,但实际是 Nexus 返回了登录页或 404 页面 HTML,Go 解析失败。这不是模块本身问题,是代理链路没通。
排查步骤:
- 运行
go env GOPROXY确认值正确且含斜杠 - 执行
go mod download -x github.com/go-yaml/yaml@v1.4.0,观察 curl 请求目标 URL - 手动
curl -v http://localhost:8081/repository/golang-proxy/github.com/go-yaml/yaml/@v/v1.4.0.info,检查响应头Content-Type: application/json和状态码 - 若返回 HTML,说明 Nexus 未启用 golang 插件、仓库类型选错、或 Public URL 缺斜杠
golang-group 和 golang (proxy) 的本质区别——前者只是聚合视图,后者才是真缓存。golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!











