1

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

假设我的 go 树中有多个包:

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`
4

1 回答 1

1

也改变你的项目结构:

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

这是处理不同版本库的唯一可能方法。

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

由于评论而更新:

根据此处描述的工作空间文档: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,那么您不需要命名导入。

现在 lib quux在版本 1 中使用 lib meier
, 因此导入将是:

import "foo/meier/v1"

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

import "foo/meier/v2"

现在,当您调用:bar -> quux -> meier
时,您将看到您无法将bar中的返回值分配/传递给meier中的某些内容

因为:meier/v1 != meier/v2

这将在编译期间失败。

如果您需要使用来自meier v1的 quux 的结果,您还需要在bar中导入meier/v1

于 2013-06-24T12:43:12.833 回答