Golang | gomod拉取私有仓库
概述
在使用go mod的过程中,依赖的包往往是第三方库,当我们自定义一个包并且放在github.com私有仓库时候,按照原来的方法则会有如下问题。
get "gitlab.com/xxx/zz": found meta tag get.metaImport{Prefix:"gitlab.com/xxx/zz", VCS:"git", RepoRoot:"https://gitlab.com/xxx/zz.git"} at //gitlab.com/xxx/zz?go-get=1
verifying gitlab.com/xxx/zz@v0.0.1: gitlab.com/xxx/zz@v0.0.1: reading https://sum.golang.org/lookup/gitlab.com/xxx/zz@v0.0.1: 410 Gone
这个错误是因为新版本go mod
会对依赖包进行checksum
校验,但是私有仓库对sum.golang.org
是不可见的,它当然没有办法成功执行checksum
。
强制git
采用ssh
的解决办法在1.13
版本之后GG
了。
使用go mod拉取私有仓库
当然Golang
在关闭了一扇门,就会打开一扇窗,它提供了一个更方便的解决方案:GOPRIVATE
环境变量。解决以上的错误,可以这样配置:
$ export GOPRIVATE=gitlab.aseit.cn/xxx
它可以声明指定域名为私有仓库,go get
在处理该域名下的所有依赖时,会直接跳过GOPROXY
和CHECKSUM
等逻辑,从而规避掉前文遇到的所有问题。
针对gitlab仓库如果是http,则有如下方案解决
$ go get --insecure xxxx
此时就会去访问http
而不是 https
而我们发现又会报错
terminal prompts disabled
实际上是因为我们需要拉仓库的代码时, 如果仓库是私有的, 肯定需要身份验证, 我们知道 go get
实际上是 git
拉取代码, 所以我们可以使用添加 SSH 的方式, 也可以直接在命令行中输入帐号密码, 本次介绍命令行, 而在 go get
时默认是关闭 git
的输入的, 此时我们需要添加环境变量, 此处我们演示临时添加一个
$ export GIT_TERMINAL_PROMPT=1
再执行 go get
就会发现提示输入帐号密码, 输入成功后就可以拉下来
总结
总结以上方法就是:
$ export GIT_TERMINAL_PROMPT=1
$ export GOPRIVATE=gitlab.aseit.cn/xxx
$ go get --insecure xxxx
go get --insecure xxxx
中的xxxx
表示仓库地址
--完--
- 原文作者: 留白
- 原文链接: https://zfunnily.github.io/2021/03/gomod/
- 更新时间:2024-04-16 01:01:05
- 本文声明:转载请标记原文作者及链接