分享
  1. 首页
  2. 文章

使用vendor管理Golang项目依赖

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

http://www.tuicool.com/articles/NjMzIbJ


我们在项目中除了大量的使用Python外,也大量的使用了Golang构建高效基础运行服务。在使用Golang过程中,我们发现Golang程序缺少依赖库版本功能是一个非常令人头大的问题:某些依赖在某个commit之后发生了API变更之后,如果不修改代码很难兼容,然而开发者之间很有可能因为参与的时间不同,导致执行 go get 命令获取的版本不同,而导致在不同电脑上出现编译不通过问题。同时,在多个程序中,如果使用的commit版本不同,也可能会导致程序编译过程中出现不同的问题。

在之前,我们解决这个问题有两个方案,一种是拆解 go get 命令的执行,首先创建对应依赖目录,利用git命令切换至指定的commit,然后执行 go install 命令。另外一种比较省事的方法是使用 godep 工具,这里就不做过多介绍了,具体可以参考文档或者搜索中文教程。

在Golang1.5之后,Go提供了 GO15VENDOREXPERIMENT 环境变量,用于将go build时的应用路径搜索调整成为 当前项目目录/vendor 目录方式。通过这种形式,我们可以实现类似于 godep 方式的项目依赖管理。不过起码在程序编译过程中,再也无需在其他端部署一个 godep 工具。

在使用之前,需要安装一个辅助工具(如果Golang自改一个就好了): go get -u -v github.com/kardianos/govendor

下面,我们用一个例子来说明。首先有一个名为 vendorproj 的项目。假如只有一个文件:

package main
import (
 "github.com/yeeuu/echoic"
)
func main() {
 e := echoic.New()
 e.SetDebug(true)
 e.Run("127.0.0.1:4321")
}

执行一下命令就可以生成vendor文件夹:

$ govendor init
$ ls
main.go vendor
$ cd vendor/
$ ls
vendor.json

这个 vendor.json 会类似 godep 工具中的描述文件版本的功能。接下来,需要执行命令将当前应用必须的文件包含进来

$ govendor add +external

如果需要更新或移除,可以参考一下工具的具体文档使用 update 或者 remove 命令即可。这样会在vendor目录下将必须的编译文件移入进来(注意:测试所需依赖并不包含,依赖项目的测试文件也不会包含)。

$ ls
github.com golang.org vendor.json
$ cat vendor.json
{
 "comment": "",
 "ignore": "test",
 "package": [
 {
 "path": "github.com/yeeuu/echoic",
 "revision": "a7d6994f92e2dc60cff071ae38b204fbd4bd2a3f",
 "revisionTime": "2015年12月18日T11:14:29+08:00"
 },
 {
 "path": "golang.org/x/net/context",
 "revision": "1d9fd3b8333e891c0e7353e1adcfe8a612573033",
 "revisionTime": "2015年11月13日T15:40:13-08:00"
 }
 ]
}
$ cd github.com/yeeuu/echoic
$ ls
LICENSE context.go group.go router.go
README.md echoic.go response.go

通过设置环境变量 GO15VENDOREXPERIMENT=1 使用vendor文件夹构建文件。可以选择 export GO15VENDOREXPERIMENT=1 或者干脆 GO15VENDOREXPERIMENT=1 go build 执行编译。

通过这种方式就可以保证程序能够实现类似Python中Virtualenv的模式,实现不同程序使用不同版本依赖的目的。



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

本文来自:CSDN博客

感谢作者:leonpengweicn

查看原文:使用vendor管理Golang项目依赖

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

关注微信
18763 次点击
1 回复 | 直到 2019年01月22日 22:25:16
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏