Go包管理的探索与实践

HundredLee · · 1094 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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

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

从头说起

  • Go原始的包管理是通过go get命令,从远程仓库拉取并放到环境变量中的src文件夹中。开发的时候通过路径使用import关键字导入。就像这样:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//最简单的方式引入一个包的方式是直接引入包,例如:
import "fmt"
import "os"
//也可以通过下面的方式将包一块引入,并写在括号内:
import (
"fmt"
"os"
)
  • 实际上go get相当于两个命令,分别是:
    • git clone
    • go install
  • 例如获取第三方包go get github.com/llimllib/loglevel ,然后在项目中这么用:
1
2
3
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文件,文件里面的内容如下:
1
2
3
package: demo01
import:
- package: github.com/llimllib/loglevel
  • 这种情况下,默认不指定安装该第三方包的版本。默认拉取master的代码。
  • 当你想更新该第三方包的代码时,执行glide up即可
  • 如果你想指定版本号,那么可以这么写:
1
2
3
4
package: demo01
import:
- package: github.com/llimllib/loglevel
version: ^1.2.0
  • 当然你可以对这个包指定一个仓库地址通过参数repo解决
1
2
3
4
5
package: demo01
import:
- package: github.com/llimllib/loglevel
version: ^1.2.0
repo: git@github.com:llimllib/loglevel.git

有疑问加站长微信联系(非本文作者)

本文来自:HundredLee's Blog

感谢作者:HundredLee

查看原文:Go包管理的探索与实践

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1094 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传