如何使用特定导入的版本标记一次性获取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`
答案 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 >杆