Go語言包管理工具(Go Package Manager)

jopen 10年前發布 | 56K 次閱讀 Google Go/Golang開發 Go

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 installgo 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`

項目主頁:http://www.baiduhome.net/lib/view/home/1416749532070

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!