背景
为了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
依然不行,还是报了错。
设置这两个环境变量:
setx GOPRIVATE git.dreame.tech
setx GONOSUMDB git.dreame.tech
设置了这两个环境变量,依然不行,还是会报错。
这个问题在于公用包go mod中的path路径不对。
公用包的项目不要直接直接go mod init进行初始化。如果需要让其他项目引用。需要通过如下指令初始化。
go mod init gitlab.com/groupName/projectName
因为上面修改配置,用ssh请求代替http请求,导致push代码不能成功,报了如下的错误:
这个错误的原因,看了一下,是因为没有ssh协议的权限。接下来,再来搞这个事情。
添加ssh key。
SSH 秘钥默认储存在账户的主目录下的 ~/.ssh 目录。
到该目录下查找秘钥。没有找到rsa.pub文件。这个文件中存放的是公钥信息。
所以,需要生成密钥信息。打开 Git Bash工具。执行这个命令,连续三次按Enter健。这个应该是为了给这个rsa.pub文件设置密码的。
ssh-keygen -t rsa
id_rsa.pub就是公钥。
登录gitlab添加sshkey。
总结
第一步:
创建一个公用包的项目,比如,core。这里有个点需要注意,不能直接用go mod init进行初始化,否则,引用该包会报路径错误的问题。需要通过这个命令进行初始化(init后面的内容实是ssh链接去掉git@)。执行完之后,push到gitlab上。
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"`
第三步:
需要设置两个环境变量。
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 模块时提高安全性和效率。