直接配goproxy指向nexus或artifactory会404,是因为go客户端拼接模块路径时不做规范化处理,若go_proxy值末尾缺斜杠,就会将github.com/go-yaml/yaml/@v/v1.2.3.info错拼为http://.../golang-proxygithub.com/...导致404;必须确保go_proxy以/结尾、使用golang (proxy)仓库类型、安装nexus-golang-plugin插件、关闭strict content validation,并配合goprivate处理私有模块。

为什么直接配 GOPROXY 指向 Nexus 或 Artifactory 会 404?
不是 Nexus 配错了,是 Go 客户端拼路径时不加斜杠——比如你设 GOPROXY=http://192.168.1.100:8081/repository/golang-proxy(缺末尾斜杠),Go 就会把 github.com/go-yaml/yaml/@v/v1.2.3.info 错拼成 http://192.168.1.100:8081/repository/golang-proxygithub.com/...,直接返回 404。
必须确保:
-
GOPROXY值以/结尾,例如http://192.168.1.100:8081/repository/golang-proxy/ - Nexus 中该仓库的 “Public URL” 显示也带末尾
/ - 别用
golang (group)类型仓库——它不响应@v/路径,只认golang (proxy)
没装 nexus-golang-plugin 就建不出 Go 代理仓库?
Nexus OSS 3.x 默认不支持 Go 模块协议,golang (proxy) 类型根本不会出现在创建列表里。插件不是可选,是刚需。
实操步骤:
- 查清 Nexus 版本(如 3.59.0),下载对应
nexus-golang-plugin-*.jar(注意兼容性) - 放入
$NEXUS_HOME/deploy/目录,重启 Nexus - 重启后进 Repository → Create repository,才能看到
golang (proxy)类型可选 - 新建时务必勾选
Disable Strict Content Validation,否则某些模块因 header 校验失败被拒
GOPRIVATE 和 GONOPROXY 有什么区别?
两者都用于私有模块,但作用机制不同,混用容易漏掉一环:
Go 配置库,使用 spf13/viper — 分层优先级(flag > env >file > KV > default),提供 BindPFlag/BindPFlags、SetEnvPrefix + SetEnvKeyReplace 等功能。
-
GOPRIVATE=git.corp.internal:告诉go命令“这个域名跳过 checksum 校验 + 不走代理”,适用于所有私有模块场景 -
GONOPROXY=git.corp.internal:仅控制“不走代理”,但依然会尝试校验 checksum(若没配GOSUMDB=off或GONOSUMDB,可能失败) - 推荐统一用
GOPRIVATE,再补GONOSUMDB=git.corp.internal关闭校验(尤其内网私有包未进官方 sumdb)
配置命令示例:go env -w GOPRIVATE=git.corp.internal GONOSUMDB=git.corp.internal
自建 goproxy 服务比 Nexus 更轻量?
如果只是小团队、无运维资源,goproxyio/goproxy 是更直接的选择,启动快、无 Java 依赖、天然支持缓存和 fallback。
部署要点:
- 在外网机器执行:
go install github.com/goproxyio/goproxy@latest,拷贝二进制到局域网服务器 - 启动命令:
goproxy -modules="https://goproxy.cn" -cache-dir="/data/goproxy-cache" -listen=":8080" - 局域网客户端设:
go env -w GOPROXY=http://192.168.1.100:8080,direct - 注意:
goproxy不缓存私有模块(如git.corp.internal/*),这部分仍靠GOPRIVATE直连 Git Server
真正容易被忽略的是:所有机器的 go env GOPROXY 输出必须严格匹配你设的值,别信 shell 配置文件——每次改完立刻运行 go env GOPROXY 确认,IDE 缓存旧值也要重启。
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!










