go111module=on是启用go模块的必要前提,否则go mod命令失效、私有模块配置不生效;goprivate需精确匹配模块路径前缀(如gitlab.example.com/*),且须配合goproxy=direct或gonoproxy及git url重写等机制确保私有仓库正常拉取。

GO111MODULE=on 是前提,不是可选项
Go 1.13+ 默认开启模块模式,但老项目或手动安装的旧版 Go 可能仍处于 GOPATH 模式。不设 GO111MODULE=on,go mod 命令会静默失效,go get 仍走 GOPATH 老路径,私有模块配置完全不生效。
实操建议:
- 运行
go env -w GO111MODULE=on永久启用(推荐) - 检查是否生效:
go env GO111MODULE输出必须是on,不是auto或空 - 若输出
auto,说明当前目录在$GOPATH/src下——直接移出该路径再试,别依赖 auto 切换
GOPRIVATE 必须精确匹配模块路径前缀
它不是“域名白名单”,而是路径前缀通配器。写错一个字符、多一个空格、漏掉 /*,私有模块就会被代理拦截或校验失败。
常见错误现象:
-
go mod download卡在git ls-remote,或报unknown revision - 明明设置了
GOPRIVATE=gitlab.example.com,但模块路径是gitlab.example.com/group/repo,仍走公网代理 - Windows 下用
set GOPRIVATE=...后没生效——PowerShell 需用$env:GOPRIVATE="...",CMD 才用set
正确写法示例:
go env -w GOPRIVATE="gitlab.example.com/*,github.com/my-team/*"
注意:* 必须紧贴斜杠后,不能写成 gitlab.example.com\* 或 gitlab.example.com/ *(空格破坏匹配)。
Go语言(Golang)1.26.0版本提供 Go 官方 Windows amd64 MSI 安装包下载入口,版本号 1.26.0,可用于旧项目维护、兼容性测试和指定版本开发环境配置。
认证凭据必须由 git 层提供,Go 不自己读 .netrc
Go 工具链本身不解析 .netrc,它调用系统 git 命令拉取代码,而 git 在 HTTPS 场景下才查 .netrc。所以路径、权限、格式三者缺一不可。
实操要点:
-
.netrc路径只能是$HOME/.netrc(Linux/macOS)或%USERPROFILE%/_netrc(Windows) - 权限必须为
600:chmod 600 ~/.netrc,否则git直接忽略 - 内容不能有注释、空行,machine 值必须和
go.mod中模块路径的域名完全一致(如模块是gitlab.example.com/group/lib,就写machine gitlab.example.com) - password 字段填 GitLab 的
Personal Access Token(勾选read_repository),不是登录密码
GOPROXY=direct 与 URL 重写要配合 GOPRIVATE 使用
只设 GOPRIVATE 不够。如果公司 Nexus 或自建代理已配置 GOPROXY,Go 仍会先尝试走代理——而代理无法携带 .netrc 凭据或 SSH 密钥,必然 401 或超时。
解决方案分两种场景:
- 纯内网开发:设
go env -w GOPROXY=direct,彻底禁用代理,让 Go 直连 Git 服务 - 混合环境(部分公有、部分私有):保留
GOPROXY,但确保GONOPROXY显式包含私有域名(go env -w GONOPROXY="gitlab.example.com/*"),此时GOPRIVATE会自动同步给GONOPROXY,但显式设置更可控 - HTTPS → SSH 转发:若私有仓库只支持 SSH,用
git config --global url."git@gitlab.example.com:".insteadOf "https://gitlab.example.com/",避免 Go 默认拼 HTTPS 地址
容易被忽略的一点:GitLab 子路径部署(如 https://example.com/gitlab)不影响 .netrc 和 insteadOf 的 machine 域名,仍只写 example.com,不带 /gitlab。
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!










