go mod模式下,import gitlab中的项目

背景

为了go项目能够尽可能复用代码,把一些公用的工具类,公用的方法等放到共用包里统一管理。把共用包放到gitlab的私有仓库中。

遇到的问题

通过https方式,执行go get报了错误。

通过ssh方式,执行go get报了错误。

修改配置,用ssh请求代替http请求:

复制代码
git config --global url."[email protected]:groupName/projectName.git".insteadOf "https://gitlab.com/groupName/projectName.git"`

配置完成之后,使用go get拉取私有仓库代码。

复制代码
go get -u -v gitlab.com/groupName/projectName

依然不行,还是报了错。

设置这两个环境变量:

bash 复制代码
setx GOPRIVATE git.dreame.tech   

setx GONOSUMDB git.dreame.tech 

设置了这两个环境变量,依然不行,还是会报错。

这个问题在于公用包go mod中的path路径不对。

公用包的项目不要直接直接go mod init进行初始化。如果需要让其他项目引用。需要通过如下指令初始化。

bash 复制代码
go mod init gitlab.com/groupName/projectName

因为上面修改配置,用ssh请求代替http请求,导致push代码不能成功,报了如下的错误:

这个错误的原因,看了一下,是因为没有ssh协议的权限。接下来,再来搞这个事情。

添加ssh key。

SSH 秘钥默认储存在账户的主目录下的 ~/.ssh 目录。

到该目录下查找秘钥。没有找到rsa.pub文件。这个文件中存放的是公钥信息。

所以,需要生成密钥信息。打开 Git Bash工具。执行这个命令,连续三次按Enter健。这个应该是为了给这个rsa.pub文件设置密码的。

bash 复制代码
ssh-keygen -t rsa

id_rsa.pub就是公钥。

登录gitlab添加sshkey。

总结

第一步:

创建一个公用包的项目,比如,core。这里有个点需要注意,不能直接用go mod init进行初始化,否则,引用该包会报路径错误的问题。需要通过这个命令进行初始化(init后面的内容实是ssh链接去掉git@)。执行完之后,push到gitlab上。

bash 复制代码
go mod init gitlab.com/groupName/projectName

公用包创建的流程到此就完成了。接下来就是引用包需要做些一些配置。

第二步:

修改配置,用ssh请求代替http请求:

复制代码
git config --global url."[email protected]:groupName/projectName.git".insteadOf "https://gitlab.com/groupName/projectName.git"`

第三步:

需要设置两个环境变量。

bash 复制代码
setx GOPRIVATE git.dreame.tech   

setx GONOSUMDB git.dreame.tech 

GOPRIVATE 是一个在 Go 语言环境中使用的环境变量,主要用于标识私有仓库,以便 Go 的模块代理(module proxy)和校验数据库(sumdb)知道哪些模块是私有的,从而避免对它们进行公共的代理和校验请求。

GONOSUMDB 是一个环境变量,用于指定不应使用公共校验和数据库 sum.golang.org 检查的模块路径前缀的 glob 模式列表。具体来说,当你在 Go 语言的模块系统中使用私有模块或私有依赖项时,可以设置 GONOSUMDB 来避免 Go 命令对它们进行公共的校验和数据库检查。

通过配置 GONOSUMDB,你可以指定哪些模块路径前缀的模块不需要使用公共校验和数据库进行验证。这有助于在私有环境中使用 Go 模块时提高安全性和效率。

相关推荐
程序员爱钓鱼1 小时前
跳转语句:break、continue、goto -《Go语言实战指南》
开发语言·后端·golang·go1.19
亮1117 小时前
GITLAB跑gradle项目 不借助maven-publish直接上传到nexus私人仓库
java·gitlab·gradle·maven
Clown958 小时前
Go语言爬虫系列教程(一) 爬虫基础入门
开发语言·爬虫·golang
极小狐17 小时前
极狐GitLab 通用软件包存储库功能介绍
java·数据库·c#·gitlab·maven
小马爱打代码18 小时前
K8S - GitLab CI 自动化构建镜像入门
ci/cd·kubernetes·gitlab
杰克逊的日记19 小时前
gitlab相关面试题及答案
gitlab
每天一个秃顶小技巧20 小时前
02.Golang 切片(slice)源码分析(一、定义与基础操作实现)
开发语言·后端·python·golang
恋喵大鲤鱼20 小时前
Golang 空结构体特性与用法
golang·空结构体
极小狐1 天前
极狐GitLab 容器镜像仓库功能介绍
java·前端·数据库·npm·gitlab
极小狐1 天前
如何构建容器镜像并将其推送到极狐GitLab容器镜像库?
开发语言·数据库·机器学习·gitlab·ruby