楔子
在開發(fā)程序中我們會引入自己的私有庫代碼,這個私有庫代碼由gitlab gitea等服務托管。我們想通過go get 以及潛在拉取代碼命令去拉取代碼,從而解決不能下載訪問問題投队,有此記錄在此,以下只針對go module版本做論述。?
正文
前提條件:
1.配置好GOPATH環(huán)境
2.支持go module版本也就是golang >= 1.11以上
方案一:
我們可以采用go vendor(需要golang>=1.6版本)包的方式,把我們依賴的私有庫代碼放入到vendor中嗜逻。
優(yōu)點:
1.在網(wǎng)絡不好的狀況下、或者無網(wǎng)編譯缭召、拉取代碼不方便的情況下適用(比如國企業(yè)務場景)栈顷。
2.代碼能正常引用逆日,不需要更改go.mod文件
缺點:
1.如果微服務多實例,每次更新部署都需要copy一份vendor包萄凤。
2.如果依賴的代碼頻繁修改發(fā)布室抽,每個服務實例也需要copy一份覆蓋。
方案二:
采用go module提供的replace替換修改go.mod文件引用包的方法來解決靡努。具體方法也是把依賴的庫下載到本地目錄中,任意目錄即可坪圾,也可以是gopath目錄中,和vendor思想雷同惑朦。
優(yōu)點:
1.同上文方案一vendor
缺點:
1.同上文方案一vendor
2.會存在找不到替換引用的代碼包兽泄。通常我們開發(fā)代碼都是在本地,我們的私有庫都是公司內(nèi)網(wǎng)可以訪問的,可能因為一些原因你本地訪問不了內(nèi)網(wǎng)或者無法拉取私有庫代碼漾月,為了能讓代碼在本地開發(fā)環(huán)境運行起來我們可提前下載好依賴包,然后用replace替換引用到這個下載的代碼包病梢,這是replace替換功能的真正用途。重點來了栅屏,我們每次開發(fā)完成之后提交代碼需要修改go.mod replace 把replace刪除掉在提交或者修改replace替換地址飘千,不然放到線上服務器運行會出錯,會提示缺少代碼依賴包文件找不到相關錯誤栈雳,當然這個錯誤很好解決,你可以約定好目錄在線上服務器以同樣的方式和目錄下放入依賴代碼缔莲,這樣replace就能找到依賴代碼了哥纫。至于為什么要刪掉或修改replace,因為每個人的本地環(huán)境不同存放依賴庫代碼位置也不同痴奏,因此replace替換地址也不同蛀骇。以上這也是一種方案,但是你有沒有發(fā)現(xiàn)這又退化回vendor復制粘貼問題了读拆。
方案三:
終極方案擅憔,配置go的GOPRIVATE
步驟一
配置golang環(huán)境變量。使用go命令 go env 查看環(huán)境變量是否設置成自己的私有代碼庫地址
為空則未設置檐晕,或者已經(jīng)設置想修改替換則使用以下命令
go env -w GOPRIVATE=gitlab.xxx.com? ? //gitlab.xxx.com為你引用的私有庫
ps:早期舊版本golang不支持 -w參數(shù),大概golang1.14版本之后有此功能需要注意暑诸!低版本可以采用環(huán)境變量export方式設置,或者修改profile文件
其中我們可以使用模糊匹配方式比如*.開頭。然后我們執(zhí)行命令查看是否設置成功辟灰,使用go env命令如下
ok此時代表設置成功个榕。
步驟二
配置git配置文件。linux切換到 ~/.gitconfig目錄文件下芥喇,如果沒有則在該目錄創(chuàng)建此文件西采。然后打開此文件準備添加內(nèi)容。在我們拉取clone代碼訪問有以下兩種方式一種是ssh訪問继控,以及https這種械馆,以下針對這兩種配置說明如下
ssh:
[url "ssh://git@github.com/"]
????????insteadOf = https://github.com/
由于我的是GitHub代碼托管平臺胖眷,所以配置的是github.com域名,如果是gitlab則配置自己搭建的gitlab域名地址霹崎,其他gitea諸如此類
以上操作也可以使用命令行方式代替瘦材,比如我想用https賬號和密碼方式代替去訪問可以使用如下命令
git config --global url."https://$GIT_USER:$GIT_TOKEN@$GOPRIVATE".insteadOf "https://$GOPRIVATE"
最終在~/.gitconfig文件中生成得內(nèi)容格式為
[url "https://root:mypassword.@gitlab.xxx.cn"]
? ? ? ? insteadOf = https://gitlab.xxx.cn
https:
[http]
????????extraheader = PRIVATE-TOKEN: {此處填寫申請的token}
如果沒有配置訪問證書以及秘鑰則先去代碼托管平臺申請然后在執(zhí)行步操作。
到此基本已經(jīng)結束仿畸,此時我們在拉取代碼不出意外基本成功食棕,如何驗證是否成功則可以使用以下命令:
go mod tidy
具體操作就是拉取依賴代碼,對依賴包文件進行增加或者刪減错沽,同時檢驗go.mod文件的正確性,并對其修改引用簿晓。
然后我們可以看見如下信息
優(yōu)點:
1.每次升級部署無需copy代碼,只需要在go.mod中指定代碼依賴版本即可
2.無需每次修改go.mod文件
3.一勞永逸
缺點
1.配置流程較為麻煩千埃,只配置一次但還可以接受
2.如果程序代碼部署到多臺物理機憔儿,每臺物理機需要安裝配置git以及配置環(huán)境變量等,如今有docker等鏡像制作方式這點也可以接受放可。
提示: 有的時候可能設置好了私鑰等配置但是還是不能拉取下來代碼,可以嘗試清理構建得緩存內(nèi)容谒臼,使用golang命令 go clean -modcache 方式具體參考go clean命令
總結
以上列舉出了針對私有庫拉取代碼的實現(xiàn)方案,并對每種方案的優(yōu)缺點說明進行了總結耀里,其中本文并沒有對曾經(jīng)的代碼管理方式dep來進行說明蜈缤,此方案golang官方已經(jīng)廢棄,因此在這里不在贅述冯挎。
參考文章
https://golang.org/doc/faq#git_https
https://zhuanlan.zhihu.com/p/646336183?utm_id=0
https://blog.csdn.net/xcbeyond/article/details/132233404
一個用golang得渣專生
完~