Golong学习之包管理的探索与实践

       引言:刚学Go没多久,但是很快我就发现了Go的一个特别坑爹的地方 —— 包管理。当然不只是GFW的问题,更多的是有的时候,每个项目使用的包的版本并不是完全一致的,而Go无法做到这一点。虽然Go1.5之后加了vendor的特性,但是我仍然觉得不够。

       不知道大家学过java、php没?例如maven、composer都是很好用的包管理工具。你可以针对每个项目建立一个包管理文件,并对每个依赖项进行版本控制。这是我需要的。并可以在项目的根目录生成lock文件,在安装依赖后,把安装时确切的版本号列表写入 lock 文件中。可以锁定该项目的特定版本。

从头说起

       Go原始的包管理是通过go get命令,从远程仓库拉取并放到环境变量中的src文件夹中。开发的时候通过路径使用import关键字导入。就像这样:

//最简单的方式引入一个包的方式是直接引入包,例如:
import "fmt"
import "os"
//也可以通过下面的方式将包一块引入,并写在括号内:
import (
"fmt"
"os"
)

       实际上go get相当于两个命令,分别是:

git clone
go install

       例如获取第三方包go get github.com/llimllib/loglevel ,然后在项目中这么用:

import (
    log "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文件,文件里面的内容如下:

package: demo01
import:
- package: github.com/llimllib/loglevel

       这种情况下,默认不指定安装该第三方包的版本。默认拉取master的代码。

       当你想更新该第三方包的代码时,cd到项目路径,执行glide up即可

       如果你想指定版本号,那么可以这么写:

package: demo01
import:
- package: github.com/llimllib/loglevel
  version: ^1.2.0

       当然你可以对这个包指定一个仓库地址通过参数repo解决

package: demo01
import:
- package: github.com/llimllib/loglevel
  version: ^1.2.0
  repo: git@github.com:llimllib/loglevel.git

       记住,若是指定版本号和仓库地址的话,你需要执行glide install

       更多有关glide的知识,可以参考

       https://github.com/Masterminds/glide
       https://glide.readthedocs.io/en/latest/glide.yaml/

       完美~有什么不对的地方,请大家指正,毕竟是初学Golang。

       完整的配置文件格式

package: github.com/Masterminds/glide
homepage: https://masterminds.github.io/glide
license: MIT
owners:
- name: Matt Butcher
email: technosophos@gmail.com
homepage: http://technosophos.com
- name: Matt Farina
email: matt@mattfarina.com
homepage: https://www.mattfarina.com
ignore:
- appengine
excludeDirs:
- node_modules
import:
- package: gopkg.in/yaml.v2
- package: github.com/Masterminds/vcs
version: ^1.2.0
repo:    git@github.com:Masterminds/vcs
vcs:     git
- package: github.com/codegangsta/cli
- package: github.com/Masterminds/semver
version: ^1.0.0
testImport:
- package: github.com/arschles/assert

转自:
https://blog.sodroid.com/2017/05/20/2017-05-20-1/?hmsr=studygolang.com&utm_medium=studygolang.com&utm_source=studygolang.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值