最开始选择使用 govendor 做为项目的依赖管理。缘由是对比了 Godoc 推荐的几个依赖管理工具,govendor 跟其余几个工具相比,目录最干净,只有一个 vendor 文件夹。(并且当时选用的 web 框架 gin 也使用了 govendor)git
后来在同事的推荐下更换了“官方”的 dep,从 govendor 无痛切换为 dep。项目目录下多了两个讨厌的 Gopkg.* 文件。以前了解的 Go 语言最佳实践并不包含这种首字母大写的文件命名方式。可是仍是用了下来,谁让是“官方”出品呢。(后来了解到 dep 是官方社区的产物)github
dep 没用多久,vgo 就来了。刚了解到 vgo 的时候专门去 dep 的 github 了解了一下。发现 dep 还在正常开发。对比 vgo 以后发现使用方式和命名方式大相径庭。(两个团队分别的产物,相关八卦能够自行 Google)。golang
此次 vgo 并无直接体验,据说 vgo 最后是要合并到 go tool 工具链中的。而且发现会在 go 1.11 版本中在2018年8月发布。因而沉下心,等合并到 go tool 中以后再体验。web
vgo 和 go1.11beta2 及 go1.11beta3 的使用方式略有不一样,本文直接以最新的 beta3 版本示例
体验 golang beta 版本比想象中要容易的多,直接输入如下命令shell
go get -v golang.org/dl/go1.11beta3 go1.11beta3 download
beta 版本的 go 跟正式版本的 go 互不影响,使用beta版本的时候直接使用命令
go1.11beta3 run **
方式
在使用以前须要开启gomodules,直接在 $GOPATH/src 目录下执行如下命令,修改环境变量框架
export GO111MODULE=on
接下来咱们来初始化go modules,来到项目目录下,执行命令工具
go1.11beta3 mod init
执行命令后,会在项目目录下发现go.mod
文件。若是发现了这个文件,说明已经初始化成功。这个文件由于没有同步依赖关系,因此文件里只有一行,就是项目目录code
若是你的项目以前使用了 dep 或其余依赖管理工具,那么在首次使用
go mod
的时候会自动同步依赖关系,并提示从某工具迁移到 go modules。这招果真漂亮,直接从其余社区工具接管。
执行如下命令会自动分析项目里的依赖关系同步到go.mod
文件中,同时建立go.sum
文件开发
go1.11beta3 mod tidy
在往后的开发工做中,直接使用这个命令就能够增删同步依赖关系。get
以上的管理依赖管理操做,因此依赖包仍是在GOPATH/src
目录下,go module 固然能够把包直接放在当前项目中管理。
go1.11beta mod vendor
直接使用这个命令就能够把GOPATH/src
目录下的依赖包同步到当前项目目录中。