返回首页 - Notes - 2017

Go 依赖管理工具


概述

目前,各技术派别中,做得最好的依赖管理工具是 Node 社区的 Yarn,此外还有 Ruby 社区的 BundlerPHP 社区的 Composer

Go 社区的依赖管理一桶浆糊,有这么好的前辈工具咋就不知道借鉴借鉴呢

鉴于实在没一个好用的工具,只好勉强选用官方开发的 golang/dep 来做依赖管理

Go 现有的这些管理工具,最大的问题在于灵活性不够,我安装一个新的包你给我自动记录到版本声明文件呗?No,它还要检查这个包你是不是真的用到了,简直多管闲事

归根到底,就是项目代码必须跟 GOPATH 捆在一起,这样的设定可以说前无古人,估计也会后无来者


安装

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


初始化

  1. dep init hello
  2. cd hello
  3. 开始项目的开发

dep init 指令必须在 GOPATH 包含的路径下执行

既可以 dep init project_name 来创建一个新项目,也可以先切换到一个已有的项目再执行 dep init 来添加依赖管理

初始化后会生成 Gopkg.tomlGopkg.lock 两文件,另外还会生成一个文件夹 vendorvendor 用于存放项目依赖的第三方包

推荐在项目根目录下放置一份以下内容的 .gitignore

/vendor

.DS_Store
Thumbs.db

.vagrant

.idea
.svn
*.swp
*.cache
*.log

依赖复原

如果从别人那复制一份新的项目,第一件事就是安装项目的依赖了


安装新的依赖包

虽说 dep 提供了 dep ensure github.com/pkg/errors 这样的命令来新增依赖,但不要想太多

它会先扫描一遍你的整个项目代码,发现没有哪里用到了这个包,那对不起,这条新增命令就忽略了

如果它扫描代码发现是真的用到了,那就会改写 Gopkg.lock 文件,并将包代码安装到 vendor 目录下,但注意,Gopkg.toml 文件它还是没有一起更新


推荐的开发流程

Go 主张的“没有用到就不能出现”理念,虽说实现了“精神上的纯粹”,但这就是一阻碍开发效率的坑爹信条

类似 Yarn 这样的包管理器,你需要什么就 install 什么,毫无心智负担,工具会帮你处理一切

Go 社区弄出的这些智障玩意,用起来就麻烦多了,如果用 dep,推荐这么用:

  1. 创建项目
  2. 开始常规开发流程,需要安装啥就 go get xxx 来装
  3. 项目定型了,执行下 dep init,它会在初始化时将用到的依赖一次性记录到 Gopkg.tomlGopkg.lockvendor
  4. 但后续变更了依赖,除了执行 dep ensure 更新 Gopkg.lockvendor 外,别忘了手动修改 Gopkg.toml 文件

date:2017-06-29、2017-07-04