Go語言包管理工具(Go Package Manager)
Go語言包管理工具(Go Package Manager)
設計目標
主要解決以下問題:
- 在斷網時依然可用
- 支持按照版本或標簽進行獲取
- 源碼打包發布是, 自動提取第三方依賴
- 將第三方依賴的包路徑轉為相對路徑導入
- 在沒有git/hg等版本工具時依然可用(zip導入)
斷網時的處理策略
在 $GOPKG_REPO
目錄緩存已經下載的庫 (默認在 $GOROOT/src.gopkg
目錄).
目錄結構如下:
$GOROOT/src.gopkg
|
+- git
+- hg
+- bzr
+- zip
當需要獲取依賴的庫時, 先從本地的緩存獲取, 然后再從遠程獲取.
對于 github/googlecode 等常見的托管網站進行定制, 如果沒有git工具則根據版本號下載對應的zip文件.
版本依賴管理
對于 app 應用一般需要設置依賴的版本. 工作模式類似 gopm 工具.
間接依賴的版本將被忽略, 因為會出現不同版本同時導入的問題.
自動提取第三方依賴
對于 app 應用, 在對應的 ./Gopkgs
目錄保存第三方依賴的信息. 格式和 godep 類似.
依賴信息在 Gopkgs/Gopkgs.json
文件中.
當前app可以是普通目錄(不受git等管理).
相對路徑導入第三方依賴
提供路徑修復命令, 在 app 路徑發生變化是, 可以將第三方庫和子庫轉為當前新的導入路徑, 完美支持 go build
零依賴編譯.
提供zip文件導入
當沒有 git 等版本工具時, 嘗試直接獲取對應版本的 zip 文件.
如果是自己假設的包服務, 提供以下的擴展:
<meta name="go-import" content="import-prefix vcs repo-root">
其中 vcs 部分除了標準的 "git", "hg", "svn" 工具外, 還支持 zip 格式.
安裝
$ go get github.com/gopkg/gopkg
起步
如何向 gopkg 添加項目.
假設你的應用代碼完成到一定階段, 想要使用 go install
和 go test
完成構建, 只需要一條 gopkg 命令:
$ gopkg save
此命令會保存版本依賴關系表保存到文件 Gopkgs/Gopkgs.json, 并復制源代碼到 Gopkgs/_workspace. 確保總有一份依賴源碼可用.
恢復
gopkg restore
命令是 gopkg save
的反向操作. 它將 Gopkgs/Gopkgs.json 中的依賴包安裝到你的 GOPATH 路徑中.
測試
$ gopkg go test
增加依賴
當你的項目源碼中 import 改變后再次使用 gopkg save
即可.
更新依賴
當你需要更新依賴包, 依次執行命令:
1. `go get -u pathto/Dependency`
2. `gopkg update pathto/Dependency`
多包支持
你可以將多個項目的依賴指向同一個 Gopkgs/Gopkgs.json 和 Gopkgs/_workspace.
`gopkg save pathto/app1 pathto/app2`
`gopkg restore pathto/app1 pathto/app2`