使用标记获取Go包依赖项

时间:2013-06-24 12:04:30

标签: dependencies go

如何使用特定导入的版本标记一次性获取Go包的所有依赖项?

假设我的go tree中包含多个包:

src/
    foo/
        bar/               (go code in package bar)
            x.go
        quux/              (go code in package main)
            y.go

现在让包“bar”依赖于使用标签版本的第三方库 (即通常用以下内容获取: go get -tags mylib_2.0 github.com/user/mylib

我想要做的是在导入行上指定标签 这样 go get ./...在我的树上获得正确的版本方案。类似的东西:

import "github.com/user/mylib" `tags=mylib_2.0`

1 个答案:

答案 0 :(得分:1)

也改变你的项目结构:

src/
    foo/
        bar/
           v1/    (go code in package bar)
              x.go
           v2/
              x.go
        quux/ 
             v1/   (go code in package main)
                y.go

这是处理不同版本lib的唯一可行方法。

有了这个你也解决了jnml描述的问题,现在每个lib都有自己的依赖关系和其他libs的版本。

由于评论

更新

根据此处描述的工作空间文档:
http://golang.org/doc/code.html#Workspaces

你的结构会像

一样
src/
    foo/
        bar/
           v1/    (go code in package bar)
              x.go
           v2/
              x.go
        quux/ 
             v1/   (go code in package main)
                y.go
        meier/ 
             v1/   (go code in package main)
                w.go
             v2/   (go code in package main)
                w.go

现在在 bar lib(x.go)中你需要来自lib * quux(y.go)的函数
要导入这个,你会写:

import "foo/quux/v1/"

同样请注意,你也可以在你的结构中打包之前的版本,所以你的结构可能看起来像/ foo / v1 / quux而不是foo / quux / v1,那么你不需要 name 进口。

现在lib quux 在版本1中使用lib meier 所以导入将是:

import "foo/meier/v1"

关于jnml, 现在你的lib bar 也需要lib meier 但是在版本2中 因此导入将如下所示:

import "foo/meier/v2"

现在打电话时: bar - > quux - >迈耶
您将看到无法将 bar 中的返回值分配/传递给 meier

中的某些内容

因为: meier / v1!= meier / v2

并且在编译期间这将失败。

如果您需要处理来自 meier v1 quux 的结果,您还需要在 meier / v1 >杆