如果代码中依赖了本地的包, 这个包是托管在内网 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 时不会去拉了