Go 1.11 起可用 Go Modules 管理私有仓库依赖,需配置 GOINSECURE 和 GOPRIVATE 环境变量、Git 凭证(SSH 或 token)、模块路径与仓库地址严格一致,并在 CI/CD 中确保凭证和环境变量正确注入。

Go 1.11 引入模块(Go Modules)后,私有仓库的依赖管理变得可行但需额外配置。核心在于让 go 命令能正确解析、认证并拉取内部模块,不依赖 GOPATH,也不强制公开托管。
配置 Go 环境识别私有域名
Go 默认只信任 github.com 等公开域名,访问私有 Git 服务(如 git.internal.company.com)前,必须明确告知哪些域名走 Git 协议而非 HTTPS 代理,并跳过证书校验(若用自签名证书)。
- 设置 环境变量
GOINSECURE="git.internal.company.com":允许非 HTTPS 或自签名证书的私有域名 - 设置
GOPRIVATE="git.internal.company.com/*":告诉 Go 这些路径不走公共代理(如 proxy.golang.org),直接 git clone - 可选:设
GOSUMDB=off或GOSUMDB=sum.golang.org+<private-key></private-key>(如需私有校验服务)
确保 Git 能无交互访问私有仓库
Go 模块下载本质是调用 git clone。若仓库需 SSH 或 Token 认证,必须提前配置好凭证,否则构建会卡在 auth 步骤。
- 推荐用 SSH:将私钥加入
~/.ssh/id_rsa,并在~/.gitconfig中配置 URL 重写,例如:
[url "git@git.internal.company.com:"]<br> insteadOf = https://git.internal.company.com/ - 或用 HTTPS + Personal Access Token:在
~/.netrc中写入:
machine git.internal.company.com<br> login <strong>your-username</strong><br> password <strong>your-token</strong>
在项目中正确引用私有模块
模块路径需与 Git 仓库地址严格对应。例如,仓库地址为 https://git.internal.company.com/go/utils,则其 go.mod 文件首行应为:
立即学习“go 语言免费学习笔记(深入)”;
module git.internal.company.com/go/utils
下游项目引入时写:
import “git.internal.company.com/go/utils”
运行 go get git.internal.company.com/go/utils@v0.1.0 即可拉取——Go 会自动匹配域名策略,走 Git 协议克隆,跳过代理和校验。
CI/CD 和容器环境注意事项
本地能跑不等于 CI 能跑。常见问题集中在环境隔离和凭证缺失:
- Docker 构建中需显式复制 SSH 私钥或
.netrc,并设置对应环境变量 - GitHub Actions / GitLab CI 需用 secrets 注入 token,并在 job 开头配置 git 凭据助手或 netrc 写入步骤
- 避免在
go.mod中硬 编码 分支名(如@main),改用语义化版本(@v0.2.1),便于审计和复现