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