多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[TOC] ## 概述 在使用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` 表示仓库地址