golang dep 依賴管理 使用

來源:互聯網
上載者:User

dep golang 包管理使用記錄

dep 是 golang 項目依賴管理之一,是官方的實驗項目,目前更新很頻繁處於高速發展期,所以選 dep 作為 golang 的依賴管理器是比較靠譜的。(已知 glide 僅支援不再開發新功能)

目前 dep v0.5.0 release 已經發布,最新的 changelog 顯示只支援 golang 1.9+ 以上的版本

golang 最原始的依賴管理是 go get ,執行命令後會拉取代碼放入 src 下面,但是它是作為 GOPATH 下全域的依賴,並且 go get 還不能版本控制,以及隔離項目的包依賴在沒有依賴管理工具的時候,golang 項目有一種目錄結構比較流行如下:

.└── src    ├── demo    │   └── main.go    ├── github.com    ├── golang.org    └── gopkg.in

這樣做的話就是每一個項目一個 GOPATH 則上面的 GOPATH=/xx/xx/src 這樣設定後也是可以編譯的,且項目依賴都是 src 下的包,與全域的無關聯, go get
擷取依賴,也必須在項目 GOPATH 下。可以看到這樣的目錄結構還是有很多缺陷的。特別是 import 包的包目錄有時會很奇怪,沒有統一的風格,且 ide 或 編輯器支援也不夠理想。

所以目前 golang 引入了 vendor 目錄作為依賴管理目錄,且 ide 或 golang 編輯外掛程式目前都能很好的支援 例如 gogland 索引依賴包時會優先尋找項目根目錄下的 vendor 目錄, vscode 的 go 外掛程式也是。那麼目前比較流行的目錄結構如下:

.├── Gopkg.lock├── Gopkg.toml├── main.go└── vendor    ├── github.com    │   ├── gin-contrib    │   ├── gin-gonic    │   ├── golang    │   ├── mattn    │   └── ugorji    ├── golang.org    │   └── x    └── gopkg.in        ├── go-playground        └── yaml.v2

項目目錄 $GOPATH/src/projectname/.

Getting Started

install / uninstall

macOS
brew install depbrew uninstall dep# /usr/local/bin/dep
windows
# 推薦 go get 安裝go get -u github.com/golang/dep/cmd/dep# $GOPATH/bin/dep.exe
Arch linux
pacman -S dep# 刪除 pacman -R dep
二進位安裝
curl https://raw.githubusercontent.com/golang/dep/master/install.sh | sh# $GOPATH/bin/dep# 刪除 > rm $GOPATH/bin/dep
源碼安裝
go get -d -u github.com/golang/depcd $(go env GOPATH)/src/github.com/golang/depDEP_LATEST=$(git describe --abbrev=0 --tags)git checkout $DEP_LATESTgo install -ldflags="-X main.version=$DEP_LATEST" ./cmd/depgit checkout master

推薦安裝方式為 各系統的快捷安裝,最方便且不容易出錯, 如果想使用最新/指定版本,推薦源碼安裝

初始化項目

推薦使用上述第二種目錄結構

mkdir $GOPATH/src/examplecd $GOPATH/src/exampledep init# 產生 vendor/ 目錄下 Gopkg.toml Gopkg.lock

使用流程

Usage

Dep is a tool for managing dependencies for Go projectsUsage: "dep [command]"Commands:  init     Set up a new Go project, or migrate an existing one  status   Report the status of the project's dependencies  ensure   Ensure a dependency is safely vendored in the project  prune    Pruning is now performed automatically by dep ensure.  version  Show the dep version informationExamples:  dep init                               set up a new project  dep ensure                             install the project's dependencies  dep ensure -update                     update the locked versions of all dependencies  dep ensure -add github.com/pkg/errors  add a dependency to the projectUse "dep help [command]" for more information about a command.

擷取依賴策略

  • 擷取最新TAG的依賴包

dep ensure -add github.com/gin-gonic/gin

  • 擷取指定分支的依賴包

dep ensure -add github.com/gin-gonic/gin@master

  • 擷取指定TAG的依賴包

dep ensure -add github.com/gin-gonic/gin@V1.2

  • 擷取指定TAG以上的依賴包

dep ensure -add github.com/gin-gonic/gin@^V1.2

  • 擷取依賴包的 子包

dep ensure -add github.com/prometheus/client_golang/prometheus/push
擷取兩個子包的情況
dep ensure -add github.com/prometheus/client_golang/prometheus/push github.com/prometheus/client_golang/prometheus/promhttp

擷取過程:根據命令先判斷本地是否有緩衝(緩衝地址:$GOPATH/src/dep),存在則直接使用緩衝,不存在則,先擷取 git 版本/分支/tag 根據命令找到對應的版本下載。

FQAs

  1. 當拉取過程中如果出現 timeout 則請自備梯子.
  2. 當拉取出現未知的錯誤,可以先手動刪除 緩衝 在嘗試一次
  3. 當出現 *build.NoGoError 錯誤,可能是 build 時當前依賴包並沒有 main 函數,這種情況一般是需要拉取依賴包的子包
  4. 當已存在的項目 dep init 會遍曆當前項目的依賴包,並下載,所以時間會很久
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.