Golang官方依赖管理工具:dep
在这里声明一下,百度或者google看到的
下面进入教程。 介绍dep是一个原型依赖管理工具,需要在Go 1.7及更高的版本中使用,说明第三方工具近期还是有市场的。 安装环境准备。//设置环境变量 使用vendor目录 GO15VENDOREXPERIMENT=1 安装dep等到 $ go get -u github.com/golang/dep/cmd/dep 验证安装$ dep dep is a tool for managing dependencies for Go projects Usage: dep <command> Commands: init Initialize a new project with manifest and lock files status Report the status of the project's dependencies ensure Ensure a dependency is safely vendored in the project prune Prune the vendor tree of unused packages 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. 有一个很重要的选项 看到这个说明已经安装好了。 使用老规矩,篇幅有限,我只介绍经常使用到的。 先进入在GOPATH的一个项目中。 cd $GOPATH/src/foordep 初始化(dep init)$ cd foordep/ $ dep init $ ll total 12 -rw-rw-r-- 1 qiangmzsx qiangmzsx 286 Aug 7 11:45 Gopkg.lock -rw-rw-r-- 1 qiangmzsx qiangmzsx 535 Aug 7 11:45 Gopkg.toml drwxrwxr-x 2 qiangmzsx qiangmzsx 4096 Aug 7 11:45 vendor 大家发现了,应用foordep目录下出现了两个文件(Gopkg.lock、Gopkg.toml)和一个目录(vendor)。 它们是什么关系呢? 下面看看它们的内容。 $ cat Gopkg.lock # This file is autogenerated,do not edit; changes may be undone by the next 'dep ensure'. [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "ab4fef131ee828e96ba67d31a7d690bd5f2f42040c6766b1b12fe856f87e0ff7" solver-name = "gps-cdcl" solver-version = 1 $ cat Gopkg.toml # Gopkg.toml example # # Refer to https://github.com/golang/dep/blob/master/docs/Gopkg.toml.md # for detailed Gopkg.toml documentation. # # required = ["github.com/user/thing/cmd/thing"] # ignored = ["github.com/user/project/pkgX","bitbucket.org/user/project/pkgA/pkgY"] # # [[constraint]] # name = "github.com/user/project" # version = "1.0.0" # # [[constraint]] # name = "github.com/user/project2" # branch = "dev" # source = "github.com/myfork/project2" # # [[override]] # name = "github.com/x/y" # version = "2.4.0" dep ensure我们写一个 # 必需包 required = ["github.com/astaxie/beego"] # 忽略包 ignored = ["golang.org/x/crypto"] # 项目元数据 [metadata] homepage = "https://github.com/qiangmzsx" license = "MIT" owners_name_1 = "qiangmzsx" owners_email_1 = "qiangmzsx@hotmail.com" owners_homepage_1 = "https://github.com/qiangmzsx" # 约束条件 [[constraint]] name = "github.com/astaxie/beego" # 可选:版本 version = "=1.8.0" # 分支 #branch = "master" # 修订 #revision = "beego 1.8.0" # 可选:指定来源 source = "github.com/astaxie/beego" 但是怎么样执行?可以执行如下命令寻找帮助: $ dep help ensure Usage: dep ensure [-update | -add] [-no-vendor | -vendor-only] [-dry-run] [<spec>...] Project spec: <import path>[:alt source URL][@<constraint>] Ensure gets a project into a complete,reproducible,and likely compilable state: * All non-stdlib imports are fulfilled * All rules in Gopkg.toml are respected * Gopkg.lock records precise versions for all dependencies * vendor/ is populated according to Gopkg.lock Ensure has fast techniques to determine that some of these steps may be unnecessary. If that determination is made,ensure may skip some steps. Flags may be passed to bypass these checks; -vendor-only will allow an out-of-date Gopkg.lock to populate vendor/,and -no-vendor will update Gopkg.lock (if needed),but never touch vendor/. The effect of passing project spec arguments varies slightly depending on the combination of flags that are passed. Examples: dep ensure Populate vendor from existing Gopkg.toml and Gopkg.lock dep ensure -add github.com/pkg/foo Introduce a named dependency at its newest version dep ensure -add github.com/pkg/foo@^1.0.1 Introduce a named dependency with a particular constraint For more detailed usage examples,see dep ensure -examples. Flags: -add add new dependencies,or populate Gopkg.toml with constraints for existing dependencies (default: false) -dry-run only report the changes that would be made (default: false) -examples print detailed usage examples (default: false) -no-vendor update Gopkg.lock (if needed),but do not update vendor/ (default: false) -update update the named dependencies (or all,if none are named) in Gopkg.lock to the latest allowed by Gopkg.toml (default: false) -v enable verbose logging (default: false) -vendor-only populate vendor/ from Gopkg.lock without updating it first (default: false) 执行一下 $ dep ensure all dirs lacked any go code 错误了,这是因为foordep目录下没有任何的go代码,只能加上一个看看。 $ vim main.go package main import ( "github.com/astaxie/beego" "runtime" ) func main() { maxCPU := runtime.NumCPU() runtime.GOMAXPROCS(maxCPU) beego.Run() } 再来试试看。 $ dep ensure $ ll vendor/ total 4 drwxrwxr-x 3 qiangmzsx qiangmzsx 4096 Aug 7 16:29 github.com 看看Gopkg.lock的内容。 # This file is autogenerated,do not edit; changes may be undone by the next 'dep ensure'. [[projects]] name = "github.com/astaxie/beego" packages = [".","config","context","grace","logs","session","toolbox","utils"] revision = "323a1c4214101331a4b71922c23d19b7409ac71f" source = "github.com/astaxie/beego" version = "v1.8.0" [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "6fb93334da1b165aaab11f170d871a92b40033575e66e2cf4289e77e0d64551d" solver-name = "gps-cdcl" solver-version = 1 现在需要解析json,我们试试使用命令行的方式导入 $ dep ensure -add github.com/bitly/go-simplejson $ Gopkg.lock # This file is autogenerated,"utils"] revision = "323a1c4214101331a4b71922c23d19b7409ac71f" source = "github.com/astaxie/beego" version = "v1.8.0" [[projects]] name = "github.com/bitly/go-simplejson" packages = ["."] revision = "aabad6e819789e569bd6aabf444c935aa9ba1e44" version = "v0.5.0" [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "6fb93334da1b165aaab11f170d871a92b40033575e66e2cf4289e77e0d64551d" solver-name = "gps-cdcl" solver-version = 1 可以发现多了 $ dep ensure -add github.com/bitly/go-simplejson Gopkg.toml and Gopkg.lock are out of sync. Run a plain dep ensure to resync them before attempting to -add 还可以指定依赖的版本: $ dep ensure -add github.com/bitly/go-simplejson@=0.4.3 是因为 # 必需包 required = ["github.com/astaxie/beego"] # 忽略包 ignored = ["golang.org/x/crypto"] # 项目元数据 [metadata] homepage = "https://github.com/qiangmzsx" license = "MIT" owners_name_1 = "qiangmzsx" owners_email_1 = "qiangmzsx@hotmail.com" owners_homepage_1 = "https://github.com/qiangmzsx" # 约束条件 [[constraint]] name = "github.com/astaxie/beego" # 可选:版本 version = "=1.8.0" # 分支 #branch = "master" # 修订 #revision = "beego 1.8.0" # 可选:指定来源 source = "github.com/astaxie/beego" [[constraint]] name = "github.com/bitly/go-simplejson" branch = "master" source = "https://github.com/bitly/go-simplejson.git"
^1.2.3 意味 1.2.3 <= X < 2.0.0 ^0.2.3 意味 0.2.3 <= X < 0.3.0 ^0.0.3 意味 0.0.3 <= X < 0.1.0 如果执行 $ dep ensure error while parsing /home/users/qiangmzsx/golang/src/foordep/Gopkg.toml: multiple constraints specified for github.com/astaxie/beego,can only specify one 说明配置写错了,需要看看 空配置我们现在尝试着把 package main import ( "github.com/astaxie/beego" "github.com/bitly/go-simplejson" "runtime" ) func main() { maxCPU := runtime.NumCPU() runtime.GOMAXPROCS(maxCPU) strJson := `{"announcer": {"nickname": "非议讲史","kind": "user","created_at": 1494904539000,"updated_at": 1494983507000,"track_id": 38088960}}` mapJson,_:=simplejson.NewJson([]byte(strJson)) println(mapJson) beego.Run() } 执行 $ dep init -v Root project is "foordep" 1 transitively valid internal packages 2 external packages imported from 2 projects (0) ? select (root) (1) ? attempt github.com/bitly/go-simplejson with 1 pkgs; 5 versions to try (1) try github.com/bitly/go-simplejson@v0.5.0 (1) ? select github.com/bitly/go-simplejson@v0.5.0 w/1 pkgs (2) ? attempt github.com/astaxie/beego with 1 pkgs; 23 versions to try (2) try github.com/astaxie/beego@v1.8.3 (2) ? select github.com/astaxie/beego@v1.8.3 w/9 pkgs ? found solution with 10 packages from 2 projects Solver wall times by segment: b-list-versions: 3.926086724s b-list-pkgs: 285.209471ms b-gmal: 266.828805ms select-atom: 3.417834ms satisfy: 3.126864ms select-root: 428.276μs new-atom: 234.106μs other: 45.014μs b-source-exists: 6.946μs b-deduce-proj-root: 3.472μs TOTAL: 4.485387512s Using ^0.5.0 as constraint for direct dep github.com/bitly/go-simplejson Locking in v0.5.0 (aabad6e) for direct dep github.com/bitly/go-simplejson Using ^1.8.3 as constraint for direct dep github.com/astaxie/beego Locking in v1.8.3 (cab8458) for direct dep github.com/astaxie/beego 此时再查看 $ vim Gopkg.toml [[constraint]] name = "github.com/astaxie/beego" version = "1.8.3" [[constraint]] name = "github.com/bitly/go-simplejson" version = "0.5.0" $ vim Gopkg.lock [[projects]] name = "github.com/astaxie/beego" packages = [".","context/param","utils"] revision = "cab8458c1c4a5a3b4bf5192922be620e6dede15b" version = "v1.8.3" [[projects]] name = "github.com/bitly/go-simplejson" packages = ["."] revision = "aabad6e819789e569bd6aabf444c935aa9ba1e44" version = "v0.5.0" [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "dc040fb12390d61768be6388ad2935bdd7f9cc93d4b1fdda421a284058277c80" solver-name = "gps-cdcl" solver-version = 1 与 dep cache看到这里时候很多人都会有疑问? $GOPATH/src不存在依赖包环境准备,将原来的cache和vendor清空,别遗漏了 $ ll total 4 -rwxr--r-- 1 qiangmzsx qiangmzsx 990 Aug 7 16:39 main.go $ vim main.go package main import ( "github.com/astaxie/beego" "github.com/bitly/go-simplejson" "runtime" ) func main() { maxCPU := runtime.NumCPU() runtime.GOMAXPROCS(maxCPU) strJson := `{"announcer": {"nickname": "非议讲史",_:=simplejson.NewJson([]byte(strJson)) println(mapJson) beego.Run() } 执行 $ ll total 4 -rwxr--r-- 1 qiangmzsx qiangmzsx 382 Aug 8 12:47 main.go $ dep init -gopath -v Searching GOPATH for projects... Following dependencies were not found in GOPATH. Dep will use the most recent versions of these projects. github.com/bitly/go-simplejson Root project is "foordep" 1 transitively valid internal packages 2 external packages imported from 2 projects (0) ? select (root) (1) ? attempt github.com/astaxie/beego with 1 pkgs; at least 1 versions to try (1) try github.com/astaxie/beego@76ce912a30f9255d8d353d365ab99cb069fd29e0 (1) ? Unable to update checked out version: fatal: reference is not a tree: 76ce912a30f9255d8d353d365ab99cb069fd29e0 (1) try github.com/astaxie/beego@v1.8.3 (1) ? select github.com/astaxie/beego@v1.8.3 w/9 pkgs (2) ? attempt github.com/bitly/go-simplejson with 1 pkgs; 5 versions to try (2) try github.com/bitly/go-simplejson@v0.5.0 (2) ? select github.com/bitly/go-simplejson@v0.5.0 w/1 pkgs ? found solution with 10 packages from 2 projects Solver wall times by segment: b-list-pkgs: 320.955115ms b-gmal: 274.950203ms satisfy: 8.179966ms select-atom: 2.62224ms new-atom: 392.168μs b-list-versions: 254.937μs select-root: 209.152μs b-deduce-proj-root: 40.45μs other: 37.01μs b-source-exists: 5.83μs TOTAL: 607.647071ms Using ^1.8.3 as constraint for direct dep github.com/astaxie/beego Locking in v1.8.3 (cab8458) for direct dep github.com/astaxie/beego Using ^0.5.0 as constraint for direct dep github.com/bitly/go-simplejson Locking in v0.5.0 (aabad6e) for direct dep github.com/bitly/go-simplejson 日志显示, $GOPATH存在依赖包环境准备,将原来的cache和vendor清空,注意 $ ll total 4 -rwxr--r-- 1 qiangmzsx qiangmzsx 382 Aug 8 12:47 main.go $ dep init -gopath -v Searching GOPATH for projects... Using master as constraint for direct dep github.com/bitly/go-simplejson Locking in master (da1a892) for direct dep github.com/bitly/go-simplejson Root project is "foordep" 1 transitively valid internal packages 2 external packages imported from 2 projects (0) ? select (root) (1) ? attempt github.com/astaxie/beego with 1 pkgs; at least 1 versions to try (1) try github.com/astaxie/beego@76ce912a30f9255d8d353d365ab99cb069fd29e0 (1) ? Unable to update checked out version: fatal: reference is not a tree: 76ce912a30f9255d8d353d365ab99cb069fd29e0 (1) try github.com/astaxie/beego@v1.8.3 (1) ? select github.com/astaxie/beego@v1.8.3 w/9 pkgs (2) ? attempt github.com/bitly/go-simplejson with 1 pkgs; at least 1 versions to try (2) try github.com/bitly/go-simplejson@master (2) ? select github.com/bitly/go-simplejson@master w/1 pkgs ? found solution with 10 packages from 2 projects Solver wall times by segment: b-list-pkgs: 312.646734ms b-gmal: 265.066047ms satisfy: 6.488056ms select-atom: 3.287416ms new-atom: 397.837μs select-root: 373.267μs b-list-versions: 108.466μs other: 47.43μs b-source-exists: 7.71μs b-deduce-proj-root: 6.568μs TOTAL: 588.429531ms Using ^1.8.3 as constraint for direct dep github.com/astaxie/beego Locking in v1.8.3 (cab8458) for direct dep github.com/astaxie/beego 可以看到
在 更新配置 (dep ensure -update)现在修改 $ vim Gopkg.toml [[constraint]] name = "github.com/astaxie/beego" # 约束为1.8.0 version = "=1.8.0" [[constraint]] name = "github.com/bitly/go-simplejson" version = "0.5.0" $ dep ensure -update Gopkg.toml and Gopkg.lock are out of sync. Run a plain dep ensure to resync them before attempting to -update $ dep ensure $ dep ensure -update -v Root project is "foordep" 1 transitively valid internal packages 2 external packages imported from 2 projects (0) ? select (root) (1) ? attempt github.com/astaxie/beego with 1 pkgs; 23 versions to try (1) try github.com/astaxie/beego@v1.8.3 (2) ? github.com/astaxie/beego@v1.8.3 not allowed by constraint 1.8.0: (2) 1.8.0 from (root) (1) try github.com/astaxie/beego@v1.8.2 (2) ? github.com/astaxie/beego@v1.8.2 not allowed by constraint 1.8.0: (2) 1.8.0 from (root) (1) try github.com/astaxie/beego@v1.8.1 (2) ? github.com/astaxie/beego@v1.8.1 not allowed by constraint 1.8.0: (2) 1.8.0 from (root) (1) try github.com/astaxie/beego@v1.8.0 (1) ? select github.com/astaxie/beego@v1.8.0 w/8 pkgs (2) ? attempt github.com/bitly/go-simplejson with 1 pkgs; 5 versions to try (2) try github.com/bitly/go-simplejson@v0.5.0 (2) ? select github.com/bitly/go-simplejson@v0.5.0 w/1 pkgs ? found solution with 9 packages from 2 projects Solver wall times by segment: b-source-exists: 4.00794324s b-list-pkgs: 2.545452669s b-gmal: 276.070372ms satisfy: 5.179016ms select-atom: 4.337704ms new-atom: 1.359055ms b-list-versions: 467.799μs b-matches: 371.239μs select-root: 193.471μs b-pair-rev: 127.992μs other: 25.962μs b-pair-version: 7.866μs TOTAL: 6.841536385s $ dep status PROJECT CONSTRAINT VERSION REVISION LATEST PKGS USED github.com/astaxie/beego 1.8.0 v1.8.0 323a1c4 323a1c4 8 github.com/bitly/go-simplejson ^0.5.0 v0.5.0 aabad6e aabad6e 1 后记看到了这里,那么对 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |