GO_PROXY必须以斜杠结尾,否则模块路径拼接错误导致404;需配合GOPRIVATE和NO_PROXY跳过私有域代理;GOSUMDB=off可禁用校验,但内网推荐部署私有sumdb。

GO_PROXY 必须设为 Nexus 代理仓库 URL,末尾斜杠不能省
很多人配完 Nexus,go mod download 还是走公网或报 404,根本原因就卡在 URL 格式上。Go 客户端会把模块路径(比如 github.com/go-yaml/yaml/@v/v2.4.0.info)直接拼到 GO_PROXY 后面,如果地址是 http://localhost:8081/repository/golang-proxy(缺斜杠),就会变成 http://localhost:8081/repository/golang-proxygithub.com/...,显然 404。
实操建议:
立即学习“go语言免费学习笔记(深入)”;
- 确认 Nexus 中该仓库的 “Public URL” 显示为完整可访问地址,且以
/结尾,例如:http://localhost:8081/repository/golang-proxy/ - 设置代理时必须带末尾斜杠:
go env -w GOPROXY="http://localhost:8081/repository/golang-proxy/" - 不要用
golang-group类型——它只是聚合视图,不响应@v/list或@v/vX.Y.Z.info请求,纯属干扰项 - 确保 Nexus 已安装
nexus-golang-plugin插件(放在$NEXUS_HOME/deploy/下,重启生效),否则新建仓库时压根没有golang (proxy)类型可选
内网离线部署 Go 二进制包,解压路径必须统一且不可软链
内网机器无法 curl https://go.dev/dl/,必须人工下载、校验、分发。这不是“懒不懒”的问题,而是安全与一致性要求:任意节点上 go version 输出应一致,GOROOT 路径也应一致,否则 CI 构建可能因路径差异失败。
实操建议:
立即学习“go语言免费学习笔记(深入)”;
- 从
https://go.dev/dl/手动下载对应架构的go1.xx.x.linux-amd64.tar.gz(Linux)或.windows-amd64.zip(Windows),**不要选 .msi/.pkg**(它们自带 installer,不适用于批量部署) - 用可信内网机器校验 SHA256 值,比对官网页面下方公布的哈希
- 解压到固定路径:
/opt/go(Linux)或C:\go(Windows),**禁止解压到用户家目录再软链**——权限继承和路径解析在 CI/容器中极易出错 - 通过 Ansible/Salt 或 shell 分发脚本统一部署,确保所有节点
GOROOT一致
GO_PRIVATE 和 NO_PROXY 必须配合使用,否则私有模块仍走代理
本地引用公司 GitLab 模块(如 gitlab.example.com/myorg/lib)时,仅设 GO_PROXY 不够。Go 默认仍会先查代理,结果要么 404(Nexus 没命中),要么超时(代理连不到内网 Git)。这不是网络不通,是路由逻辑没绕开。
实操建议:
立即学习“go语言免费学习笔记(深入)”;
- 用通配符明确标记私有域:
go env -w GOPRIVATE="gitlab.example.com,*.corp.example.com" - 同步配置
NO_PROXY(注意不是NO_PROXY环境变量,而是 Go 自己识别的):go env -w GOPROXY="http://nexus.internal/repository/golang-proxy/,direct"——direct是 fallback,但只有GOPRIVATE匹配的域名才会跳过代理直连 - 若 Nexus 启用了 Realm 认证,还需配
~/.netrc:machine nexus.internal login admin password apikey-xxx;JFrog 用户填 API Key 到 password 字段 - 验证方式:
go list -m gitlab.example.com/myorg/lib@latest应成功,且curl -I http://nexus.internal/repository/golang-proxy/gitlab.example.com/返回 404(说明没命中,走直连)
GOSUMDB=off 不是万能解,内网需闭环校验或禁用
go build 卡在 verifying github.com/xxx@v1.2.3?那多半是 GOSUMDB 还在尝试连 sum.golang.org。内网默认不放行该域名,且证书也不受信,结果就是超时或 TLS handshake failed。
实操建议:
立即学习“go语言免费学习笔记(深入)”;
- 最简方案:
go env -w GOSUMDB=off—— 放弃校验,适合可信内网环境 - 更稳妥方案:部署私有 sumdb(如
athens自带校验服务),或设GOSUMDB=sum.golang.org+https://sum.golang.org并配合内网 DNS 将sum.golang.org解析到私有服务 IP(需运维介入) - 注意:
GOSUMDB=off仅影响校验,不影响模块下载;但若同时用GOPROXY=direct,则模块下载和校验都绕过网络 - 验证:
go env GOSUMDB输出应为off或自定义地址,而非空或sum.golang.org
golang (proxy) 仓库 TTL 默认 3 小时,刚 push 的 tag 可能拉不到最新版——这不是 Go 本地缓存问题,得去 Nexus 后台调低 “Cache Timeout”;另外,GO111MODULE=on 必须全局开启,否则 go mod 命令失效,而 GOPATH 仍要导出到 PATH,不然 go install 生成的二进制找不到。


















