分享
  1. 首页
  2. 文章

godep支持Go 1.5 vendor

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

Go 1.5 vendor/实验特性出炉后,市面上的go第三方包依赖和管理工具显然都无法与之兼容,除了修改代码,别无它法。市场占有率最大的godep做出了表 率,目前其最新版本(go get github.com/tools/godep)已经初步支持了这一实验特性,即在GO15VENDOREXPERIMENT=1时,将使用vendor 目录(而不是Godeps目录)存放copy的第三方包,并在godep go build时不再rewrite GOPATH就可以实现利用vendor下第三方包的构建。下面我们就用例子来验证一下Godep对vendor的支持。

一、升级godep到最新版本

如果要用到go 1.5 vendor,那么godep要升级(go get -u github.com/tools/godep;go build github.com/tools/godep)到当前的最新版本"commit d8799f112f6c8dfe1e56142831bc3bb5c8796a0e"。最新版本兼容老版本的功能,同时提供对go 1.5 vendor支持,两者之间转换的开关就是环境变量:GO15VENDOREXPERIMENT。

当GO15VENDOREXPERIMENT没有被set时,godep沿用以前的方式;当GO15VENDOREXPERIMENT = 1时,godep将用vendor替代Godeps目录以存放第三方包,同时go save将无法使用-r命令行选项(-r选项用于重写源码中的import path):

$ godep save -r
godep: flag -r is incompatible with the vendoring experiment

二、例子

下面是一个godep的例子(go 1.5 beta3),例子的目录结构如下:

$(GOPATH)/src/tonybai.com/
├── app
│ └── main.go
└── foolib
└── foolib.go

//foolib.go
package foo

import "fmt"

func Hello() {
fmt.Println("Hello from foolib")
}

//main.go
package main

import "tonybai.com/foolib"

func main() {
foo.Hello()
}

如果GO15VENDOREXPERIMENT没有被set时,godep的各种命令将按之前的方式执行。

$ godep save
$ godep go build

$(GOPATH)/src/tonybai.com/
├── Godeps
│ ├── Godeps.json
│ ├── Readme
│ └── _workspace
│ └── src
│ └── tonybai.com
│ └── foolib
│ └── foolib.go
├── app*
└── main.go

$./app
Hello from foolib

godep将第三方包放在Godeps/_workspace/src下面。godep go build会rewrite GOPATH以实现使用_workspace下面的第三方包来构建的目的。

如果GO15VENDOREXPERIMENT = 1,那么godep会按照新的方式执行各种命令:
$ godep save
$ godep go build

$(GOPATH)/src/tonybai.com/
├── Godeps
│ ├── Godeps.json
│ └── Readme
├── app*
├── main.go
└── vendor
└── tonybai.com
└── foolib
└── foolib.go

可以看出godep建立vendor目录来存放第三方包,Godeps目录依然保留,但只是存放Godeps.json,以保存些第三方包的meta信息:
//Godeps.json
{
"ImportPath": "tonybai.com/app",
"GoVersion": "go1.5beta3",
"Deps": [
{
"ImportPath": "tonybai.com/foolib",
"Rev": "7f2f94dc589ba9e053ef13b3b01fa327c27bf161"
}
]
}

三、迁移

由于godep前后的两种工作模式并不兼容,因此大量存量的使用godep的repo,如果想使用Go 1.5 vendor,那么在升级到Go 1.5之后需要做一些迁移工作。godep没有提供自动的迁移工具,目前只能手动迁移,godep github主页上给出了手动迁移的命令步骤:

$ unset GO15VENDOREXPERIMENT
$ godep restore

//如果之前使用了godep save -r,那么下面这行命令将自动undo rewritten import。
$ godep save ./...

$ rm -rf Godeps
$ export GO15VENDOREXPERIMENT=1
$ godep save ./...
# You should see your Godeps/_workspace/src files "moved" to vendor/.

© 2015, bigwhite. 版权所有.


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

本文来自:Tony Bai

感谢作者:bigwhite

查看原文:godep支持Go 1.5 vendor

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

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

用户登录

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

今日阅读排行

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

一周阅读排行

    加载中

关注我

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

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

给该专栏投稿 写篇新文章

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

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