繁体   English   中英

使用标签获取Go软件包依赖关系

[英]Fetching Go package dependencies using tags

如何使用特定导入上的版本标签一次获取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

我想做的是在导入行上指定一个标签,这样我树上的get。/ ...就可以得到正确的版本方案。 就像是:

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

也改变您的项目结构:

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所述的问题,现在每个库都具有与其他库的依赖关系和版本。

由于评论而更新:

根据此处描述的工作空间文档:
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结果,则还需要在栏中导入meier / v1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM