go mod 拉取私有仓库

前言

如果代码中依赖了本地的包, 这个包是托管在内网 Gitlab 中, 而且不是 HTTPS 服务,那么应该怎样使用 go mod 拉取代码呢? 本文会给你我的答案

正文

首先我们要知道, 如果本地的 go 环境中已有某个包, 在使用 go mod vendor 时是不会去再下载的, 会直接将包拷贝到 vendor 中, 因此我们使用 go get xxx 下载私有仓库的包到本地即可

go get xxxxx

然后我们发现 go get 默认会拉取 https 的包, 但是我们的仓库又没有做 https 映射, 也就是会请求 https://xxxxx 时会报错

connection refused

针对 http 的情况, 尽管 http 不够安全, 但是 go 官方还是有一个选项

go get --insecure xxxx

此时就会去访问 http 而不是 https

而我们发现又会报错

terminal prompts disabled

实际上是因为我们需要拉仓库的代码时, 如果仓库是私有的, 肯定需要身份验证, 我们知道 go get 实际上是 git 拉取代码, 所以我们可以使用添加 SSH 的方式, 也可以直接在命令行中输入帐密, 本次介绍命令行, 而在 go get 时默认是关闭 git 的输入的, 此时我们需要添加环境变量, 此处我们演示临时添加一个

export GIT_TERMINAL_PROMPT=1

在执行 go get 就会发现提示输入帐密, 输入成功后就可以拉下来

然后我们执行 go mod vendor 会发现没有问题了, 因为你已经把私有的拉下来了, 执行 vendor 时不会去拉了

原文地址:https://www.cnblogs.com/chnmig/p/12868474.html