go get拉取私有仓库代码

在日常开发中,大家可能使用私有仓库路比较多,比如gitlab,我是一名go程序员,当我想使用我gitlab中其他仓库的代码应该怎么做呢?
今天下午折腾了一下,也遇到了不少坑,放在这里给自己做笔记,同时为大家提供思路

环境

假设:
你的GITLAb仓库: https://gitlabdemo.com
代码仓库: https://gitlabdemo.com/godemo

前提

  • gitlab需要配置为域名模式
  • 代码需要发布release
  • 本地需要添加gitlab的ssh验证

gitlab配置域名

vi /etc/gitlab/gitlab.rb 

image
需要修改域名、证书修改完成后,重新编译gitlab

gitlab-ctl reconfigure

理论上来说就可以通过上面配置的域名访问gitlab了,如果访问失败,可以通过下面的命令查看日志

gitlab-ctl  tail

代码仓库发布release

先创建一个tag,然后在这里发布release
image-1732624147068

配置ssh访问

参考: https://blog.csdn.net/ip36900044/article/details/135022672

设置GOPRIVATE

如果不设置会默认走GOPROXY,由于是私有的,所以会失败的

go env -w  GOPRIVATE=gitlabdemo.com

关闭GOSUMDB

go env -w  GOSUMDB=off

拉取代码

go get gitlabdemo.com/godemo 可以看到可以拉取了

image-1732625213232

报错处理

错误:

go get 44.44.44.44:9091/godemo
go: malformed module path "44.44.44.44:9091/godemo": invalid char ':'

解决: go get 不支持IP地址

错误:

go get gitlabdemo.com/godemo       
go: unrecognized import path "gitlabdemo.com/godemo ": parse https://gitlabdemo.com/godemo ?go-get=1: no go-import meta tags (meta tag 44.44.44.44:9091/godemo did not match import path gitlabdemo.com/godemo )

解决:由于历史原因,gitlab未使用域名访问,造成返回不一致,修改gitlab为域名访问后解决

错误:

get "gitlabdemo.com/godemo ": found meta tag vcs.metaImport{Prefix:"gitlabdemo.com/godemo ", VCS:"git", RepoRoot:"https://gitlabdemo.com/godemo .git"} at //gitlabdemo.com/godemo ?go-get=1
go: module gitlabdemo.com/godemo : git ls-remote -q origin in C:\Users\chenchen\go\pkg\mod\cache\vcs\832d0d40ffe890835bff3821b947a8fb208e5d9edcd72e2a05bddca3863620b7: 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.

解决: 配置SSH认证后解决