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

背景

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

遇到的问题

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

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

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

复制代码
git config --global url."git@gitlab.com: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."git@gitlab.com: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 模块时提高安全性和效率。

相关推荐
ShuiShenHuoLe1 小时前
golang-jwt v5 入门
开发语言·后端·golang
geovindu4 小时前
go: Task Scheduler
开发语言·后端·golang
FfHUCisI7 小时前
Go 内存分配器概览:从 TCMalloc 到三级缓存架构
缓存·架构·golang
Johnston_man8 小时前
golang 安装 protoc、protoc-gen-go、protoc-gen-go-grpc、protoc-gen-grpc-gateway
后端·golang
ttwuai8 小时前
Go 后台接入单点登录后,JWT、菜单权限和接口 403 怎么验?
开发语言·后端·golang
极小狐10 小时前
干掉流水线里的长期密钥:用 OIDC 让 CI/CD 与云以临时凭证对接
microsoft·ci/cd·gitlab·devops·ci·cd·oidc
snow@li10 小时前
服务器运维:阿里云安装软件gitlab/智能体协助安装/智能体协同运维
运维·gitlab
码士集团小青1 天前
从对标 Java 到对标 Go:Native AOT 的“无痛化“之路,走到哪一站了?
golang
右耳朵猫AI1 天前
Go周刊2026W36 | Go 1.27.1 发布、TinyGo 0.42、HTTP/2 原生迁入 net/http、quic-go 0.62
redis·http·golang
极小狐1 天前
CI 流水线提速实战:缓存设计与依赖代理的工程实践
缓存·ci/cd·gitlab·devops