现象
在使用gomod模式管理golang包的时候,下载开源的公共包还可以,但是一旦使用内部或者私有的包,就可能会出现如下所示的问题:

server response: not found: git.xxx.com/xxxxxx/xxx@v0.6.8: unrecognized import path "git.xxx.com/xxxxxx/xxx": https fetch: Get "https://git.xxx.com/xxxxxx/xxx?go-get=1": dial tcp xx.xx.xx.xx:443: connect: connection refused
1
原因
究其原因,一方面使用如下GOPROXY代理的方式,只能管理开源的golang包及依赖;另一方面,私有的仓库中的项目,需要配置相应的用户权限才能访问,并且通常需要配置跳过相关私有仓库。

GOPROXY="https://goproxy.cn,direct"
1
Windows系统使用以下命令设置GOPRIVATE为私有仓库地址:

set GOPRIVATE="git.xxx.com"
// 或者go env -w GOPRIVATE="git.xxx.com"
// 或者env:GOPRIVATE="git.xxx.com/"
1
2
3
PS:在命令行中,通过set GOPRIVATE的命令方式,只在当前命令行有效,换个编辑器,使用go env命令查看环境变量,发现还是没有设置,这时候就需要右键[我的电脑]设置该环境变量。
其中,git.xxx.com为私有仓库地址,在解析的时候使用使用前缀匹配的方式,所有的git.xxx.com地址中的所有项目都会被视为private-modules。配置该方式后,对于企业、私有Group等,只要代码仓库地址不变、属于项目组、并且有权限,配置一次就可以无限次拉取该私有仓库中的所有项目。

Linux设置方式,在terminal中输入以下命令:

export GOPRIVATE=git.xxx.com/
1
其中,git.xxx.com替换为具体的私有仓库域名

解决方式
检查GO111MODULE是否打开
通过go env命令查看GO111MODULE配置是否打开,go 1.12及以下的版本需要配置如下环境变量打开GO111MODULE,go 1.13及以上的版本默认是打开的。

GO111MODULE=on 
1
设置代理环境变量
GOPROXY="https://goproxy.cn,directt"
// 或者也可以设置为 GOPROXY="https://goproxy.io,direct"
1
2
配置私有仓库域名
GOPRIVATE="git.xxx.com" (引号里替换公司私有库域名)
1
检查git config配置是否正确
git config -l 查看git的所有配置
1
如果git没有配置用户信息,可以通过如下命令设置。

git config --global user.name="xxx" 
1
注意:也可以使用git config --global user.name “xxx” 命令设置用户名,一般是git账户的邮箱前缀,使用global user.email命令设置邮箱,一般只需设置一个用户名即可。

将下载代码方式由http改为ssh
执行如下命令将获取仓库项目的方式由http或https改为ssh。

git config --global url."ssh://git@git.xxx.com:port/".insteadOf "https://git.xxx.com/"
1
由于go install、go mod tidy 命令下载依赖的时候是通过git命令去下载的,而且默认使用http或https协议,上面使用命令修改为ssh协议去获取。

查看包之间的依赖关系与权限
在拉取私有包,可以使用-x参数获取详细信息,例如go get -x git.xxx.com/xxx,查看是否存在包与包之间的依赖关系。

go get -x git.xxx.com/xxx
1
PS:有些私有包可能没有权限,也会导致获取依赖包失败。

使用go mod tidy管理go mod依赖
go mod tidy
1
设置完上面的配置后,如果通过go mod tidy或者go get -x 所需要下载的私有包 命令后,出现下面的信息:

go: git.xxx.com/go-xxx/xxxxx@v0.xxx.0: unknown revision v0.xxx.0
1
或者

go get: module git.xxx.com/xxx/xxxxxx: git ls-remote -q origin in D:\Go1.16\gopath\pkg\mod\cache\vcs\xxxexxxxxx666xxxx8888xxx: exit status 128:
        Host key verification failed.
        fatal: Could not read from remote repository.

        Please make sure you have the correct access rights
        and the repository exists.
1
2
3
4
5
6
可能是因为在配置GOPRIVATE和SSH方式下载私有包之前已经通过git clone http或https的方式下载过,导致包冲突,把原来下载的包删除,再重新执行git clone ssh://git@git.xxx.com:port/xxxxxx/xxxxx.git的ssh方式下载私有包,然后通过go get -x git.xxxxxx.com/xxxxx或者go mod tidy命令重新下载依赖。
————————————————
版权声明:本文为CSDN博主「love666666shen」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/love666666shen/article/details/120048940

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐