Go依賴管理工具 - dep

Go依賴管理工具

Go dependency management tool

環境要求

  • Golang >= 1.9
  • Dep

目前版本:

dep:
 version     : devel
 build date  : 
 git hash    : 
 go version  : go1.10
 go compiler : gc
 platform    : linux/amd64

Latest releasev0.4.1linux

安裝

go get -u github.com/golang/dep/cmd/dep

$GOPATH/bin不在PATH下,則須要將生成的dep文件從$GOPATH/bin移動至$GOBIANgit

驗證

$ dep
Dep is a tool for managing dependencies for Go projects

Usage: "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 information

Examples:
  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 project

Use "dep help [command]" for more information about a command.

初始化

在項目根目錄執行初始化命令,dep在初始化時會分析應用程序所須要的全部依賴包,得出依賴包清單github

並生成vendor目錄,Gopkg.tomlGopkg.lock文件golang

image

默認初始化

$ dep init -v

直接從對應網絡資源處下載json

優先從$GOPATH初始化

$ dep init -gopath -v

該命令會先從$GOPATH查找既有的依賴包,若不存在則從對應網絡資源處下載安全

Gopkg.toml

該文件由dep init生成,包含管理dep行爲的規則聲明網絡

required = ["github.com/user/thing/cmd/thing"]

ignored = [
  "github.com/user/project/pkgX",
  "bitbucket.org/user/project/pkgA/pkgY"
]

[metadata]
key1 = "value that convey data to other systems"
system1-data = "value that is used by a system"
system2-data = "value that is used by another system"

[[constraint]]
  # Required: the root import path of the project being constrained.
  name = "github.com/user/project"
  # Recommended: the version constraint to enforce for the project.
  # Note that only one of "branch", "version" or "revision" can be specified.
  version = "1.0.0"
  branch = "master"
  revision = "abc123"

  # Optional: an alternate location (URL or import path) for the project's source.
  source = "https://github.com/myfork/package.git"

  # Optional: metadata about the constraint or override that could be used by other independent systems
  [metadata]
  key1 = "value that convey data to other systems"
  system1-data = "value that is used by a system"
  system2-data = "value that is used by another system"

Gopkg.lock

該文件由dep ensuredep init生成,包含一個項目依賴關係圖的傳遞完整快照,表示爲一系列[[project]]ide

# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'.

[[projects]]
  branch = "master"
  name = "github.com/golang/protobuf"
  packages = [
    "jsonpb",
    "proto",
    "protoc-gen-go/descriptor",
    "ptypes",
    "ptypes/any",
    "ptypes/duration",
    "ptypes/struct",
    "ptypes/timestamp"
  ]
  revision = "bbd03ef6da3a115852eaf24c8a1c46aeb39aa175"

經常使用命令

dep ensure

從項目中的Gopkg.tomlGopkg.lock中分析關係圖,並獲取所需的依賴包工具

用於確保本地的關係圖、鎖、依賴包清單徹底一致jsonp

dep ensure -add

# 引入該依賴包的最新版本
dep ensure -add github.com/pkg/foo

# 引入具備特定約束(指定版本)的依賴包
dep ensure -add github.com/pkg/foo@^1.0.1

dep ensure -update

Gopkg.lock中的約定依賴項更新爲Gopkg.toml容許的最新版本

最後

目前dep還在官方試驗階段,但已表示生產可安全使用

若是出現什麼問題,你們能夠一塊兒留個言討論討論

相關文章
相關標籤/搜索