引言:刚学Go没多久,但是很快我就发现了Go的一个特别坑爹的地方 —— 包管理。当然不只是GFW的问题,更多的是有的时候,每个项目使用的包的版本并不是完全一致的,而Go无法做到这一点。虽然Go1.5之后加了vendor的特性,但是我仍然觉得不够。
不知道大家学过java、php没?例如maven、composer都是很好用的包管理工具。你可以针对每个项目建立一个包管理文件,并对每个依赖项进行版本控制。这是我需要的。并可以在项目的根目录生成lock文件,在安装依赖后,把安装时确切的版本号列表写入 lock 文件中。可以锁定该项目的特定版本。
从头说起
- Go原始的包管理是通过
go get
命令,从远程仓库拉取并放到环境变量中的src
文件夹中。开发的时候通过路径使用import
关键字导入。就像这样:
|
|
- 实际上
go get
相当于两个命令,分别是:git clone
go install
- 例如获取第三方包
go get github.com/llimllib/loglevel
,然后在项目中这么用:
|
|
- 是不是觉得特别坑爹?我也觉得。显然接下来我要给你们介绍一个我认为特别牛逼的可以颠覆这些复杂的操作的包管理工具。
- 那就是大名鼎鼎的glide
Glide 的安装
Linux 用户
curl https://glide.sh/get | sh
Mac 用户
brew install glide
Glide 的使用
- 进入项目根目录执行
glide create
创建glide.yaml - 通过
glide get github.com/llimllib/loglevel
获取第三方包 - 执行完前两个步骤,你会发现项目根目录出现了
glide.yaml
文件,文件里面的内容如下:
|
|
- 这种情况下,默认不指定安装该第三方包的版本。默认拉取master的代码。
- 当你想更新该第三方包的代码时,执行
glide up
即可 - 如果你想指定版本号,那么可以这么写:
|
|
- 当然你可以对这个包指定一个仓库地址通过参数repo解决
|
|
记住,若是指定版本号和仓库地址的话,你需要执行
glide install
更多有关glide的知识,可以参考
完美~有什么不对的地方,请大家指正,毕竟是初学Golang。
有疑问加站长微信联系(非本文作者)