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 模块时提高安全性和效率。

相关推荐
平头哥AI1 小时前
Day 22 _ 包装错误别丢链_%w、errors.Is 与 errors.As
android·服务器·学习·golang·go
golang学习记6 小时前
Go 1.27新特性: json/v2使用有趣指南
开发语言·golang·json
王码码20357 小时前
Go语言CGO:Go与C交互
后端·golang·go·接口
PC2005-cloud8 小时前
DSH 白嫖指南:接入 Command Code Go、WorkBuddy 与 Trae 的免费额度
开发语言·后端·golang
名字还没想好☜9 小时前
Docker 镜像瘦身进阶:用 distroless/scratch 把 Go 服务打到 10MB,以及没 shell 怎么调试
运维·docker·容器·golang·kubernetes
lvshuocool9 小时前
golang 多版本管理工具 -- g
开发语言·后端·golang
海盗123412 小时前
DSH 接入 OpenCode Go 报 400 MissingSessionID:从 LLM 语义层退到 fetch 传输层的完整排障
开发语言·后端·golang
web守墓人15 小时前
【goed/ui】go开发windows原生应用之Helloworld篇
windows·ui·golang
平头哥AI15 小时前
Day 21 _ error 是个普通值_errors.New 与 fmt.Errorf 造出来,沿调用栈抛到 main 接住
后端·学习·golang·go
HotCoffee-GPS1 天前
Golang性能分析pprof
golang