一.理論概述
1. 依賴的概念
我們不可能所有的編碼都要自己寫,我們需要大量引用第三方的庫,依賴它來進行編譯。
2. 依賴管理的三個階段gopath,govendor,go mod
a. gopath: gopath顧名思義,就是go的環境目錄,有以下幾個特點
- 預設在~/go(unix,linux),%useruserprofileuserprofile%\go(windows) [使用者目錄下的go] ,它的管理方式是不管理,所有依賴都在gopath找,這樣會導致乙個問題:所有專案都放在這裡,所有依賴的東西也放在這裡,後面就會變得非常大
- 歷史:google將20億行**,9百萬個檔案放在乙個repo裡
- 在實際操作當中有個注意事項,就是需要在gopath底下建立乙個src檔案,並且把專案和依賴都放入裡面
b. govendor
- 在gopath方式管理依賴的時候會出現乙個問題,比如project1需要用到依賴的庫a(1.0版本),project2需要用到的依賴的庫也還是a,但是它需要2.0版本,這時候他們又放在同乙個目錄底下,那到底引用誰的呢?這時候出現了vendor,即在project1目錄底下建立乙個vendor,project2目錄底下建立乙個vendor,將各自引用的庫放在裡面即可。
- 這裡要額外提乙個知識點,就是go是如何尋找對應的庫呢?它會先到go安裝目錄底下找對應找依賴庫,再到gopath的src裡找依賴庫,如果加入了vendor會先在裡面找。 vendor > gopath/src > go/src
- 這時候衍生了大量第三方依賴管理工具:glide,dep,有點類似php中的composer (個人感覺)
c. go mod
- go module是go會在1.11中正式推出的包管理機制
- 由go 命令統一管理,使用者無需關心目錄結構
- 編譯時是從gopath/pkg/mod下查詢依賴
- 更新依賴:go get[@v], go mod tidy 清除舊的資訊
- 初始化 go mod init
- 將舊專案移到go mod,1.先初始化 go mod init 2.go build ./...
- 增加依賴,可以直接go get / import **裡面加(build的時候會自動載入依賴,但是可能暫時沒有提示)
Go 語言的包依賴管理
對於從 ruby python 或者 node 等程式語言轉向 go 語言的開發者,可能會有乙個疑問 go 語言中的包依賴關係是怎麼管理的?有沒有什麼方便使用的工具呢?我最近研究了一下這個問題,以下是我的研究報告。在 go 語言中,我們可以使用go get命令安裝遠端倉庫中託管的 不同於 ruby ...
Go 語言程式設計 go mod 依賴包管理
golang 將 modules 模組 定義為 源 交付和版本控制的單元 有了 go mod 之後,每個專案 源 目錄 就是乙個 module,只要其中包含了 go.mod 檔案。go mod 指令和 go.mod 檔案用於記錄和解析模組之間的依賴性。go.mod 檔案一旦建立後,它的內容將會被 g...
Go依賴管理工具(三)govendor
安裝方法 go get u github.com kardianos govendor用法 govendor init 初始化 vendor 目錄,生成乙個初始化的vendor.json govendor add local 加本專案中用到的dependency加到vendor.json裡面 gov...