網站首頁 編程語言 正文
一、為什么要包管理
默認Go的第三方包都是放在Gopath的src目錄下,而且這些包都沒有版本號的概念,這樣的可能會出現一些問題。
舉個例子:當A同事將開發完程序之后,此時可能引用了一個第三方的包,過了不久之后,B同事接手了該項目,此時如果B同事通過go get 命令獲取了包,而且包的版本進行了升級,恰巧這個包又不兼容以前的版本,這就會導致程序編譯錯誤等問題。或者當這個維護的第三方包刪除了,那么B同學則不能下載到該包。
由上面的例子就能知道,為什么需要進行包的依賴管理了。
go里面進行包依賴管理的工具有幾個。godep就是其中之一。
二、安裝godep
1.安裝方法: go get github.com/tools/godep
2.驗證是否安裝成功:在shell里面鍵入 godep ,應該會出現幫助信息。
Usage: godep command [arguments] The commands are: save list and copy dependencies into Godeps //save命令主要是用于保存當前的依賴 go run the go tool with saved dependencies //主要是用于執行Go程序,相當于在原來的go命令上套了一層,因為涉及到了包管理 get download and install packages with specified dependencies //get命令主要是用于獲取當前指定的依賴包 path print GOPATH for dependency code restore check out listed dependency versions in GOPATH //把依賴的包都下載到Gopath當中 update update selected packages or the go version //更新依賴的包 diff shows the diff between current and previously saved set of dependencies version show version info
三、演示如何使用godep
如下項目使用了第三方的包,那么我們就可以使用godep進行包管理
1. 在項目根目錄,執行godep save
命令,如果執行成功,則會生成兩個文件夾 Godeps 和 vendor
godep save 會把當前包所依賴的所有第三方包掃描出來,然后將源代碼放在vendor目錄下。
GoDeps保存的是第三方包的依賴信息
Vendor保存所有依賴的第三方包
可以查看一下Godep.json
{ "ImportPath": "godepDemo/protobuf", "GoVersion": "go1.10", "GodepVersion": "v80", "Deps": [ { "ImportPath": "github.com/golang/protobuf/proto", "Comment": "v1.3.2-1-g4c88cc3f", "Rev": "4c88cc3f1a34ffade77b79abc53335d1e511f25b" } ] }
Deps這一個字段里面保存著當前依賴包的路徑、git提交的版本號信息。下次在拉下代碼之后,執行Go build 就會執行Vendor里面的代碼,這樣就再也不用擔心代碼不一致的問題。
備注:當引用的第三方包要升級了怎么辦,那么就修改Godep.json里面的提交的版本號就行了。
Godep是怎么實現版本管理的,可以參考下面這個圖。
總結如何使用godep
- 1.保證程序能夠正常編譯
- 2.執行godep save 命令,執行之后會將所有的依賴的第三方包掃描出來,生成Godeps和Vendor目錄
- 3.提交上面兩個文件夾到自己的代碼庫,提交之后我們代碼中的第三方依賴就固定下來了。
- 4.如果需要更新依賴的版本,那么直接更新godep.json里面的第三方包的版本號,然后再執行一次godep save,最后提交到我們的代碼庫就行了。
例如:可以查看一下我依賴的protobuf的commitId
然后更新一下Godeps.json里面的版本號
原文鏈接:https://www.cnblogs.com/dcz2015/p/11428458.html
相關推薦
- 2022-03-31 C#循環與循環控制的表達式樹實現_C#教程
- 2022-12-23 go語言優雅地處理error工具及技巧詳解_Golang
- 2022-08-05 lambda表達式集合list根據某個屬性去重
- 2023-11-14 Kubernetes常用命令(持續更新)
- 2023-01-02 Android?Map數據結構全面總結分析_Android
- 2022-11-05 Swift?Access?Control訪問控制與斷言詳細介紹_Swift
- 2022-05-12 寶塔面板配置SSL證書
- 2022-03-27 C語言中scanf與scnaf_s函數詳解_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支