也改变你的项目结构:
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