背景
為了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 模塊時提高安全性和效率。