在同一文件中处理不同的版本化软件包

时间:2018-05-29 16:10:29

标签: go import

我们的数据库有两个不同的版本包。我们的一些项目仍然使用旧的数据库,而新的数据库使用新的数据库

我们有一个包conn

import(
    "gopkg.in/db/pkg.v3"
)

...
func connect() {
   y := dbpkg.New()
   ...
}

现在我们已经gopkg.in/db/pkg.v4进来了。pkg.v3pkg.v4都暴露了非常相似的功能,当然,除了db版本之间的变化。我们的conn包使用的是v3v4之间通常可用的标准部分。因此,我们希望按原样维护包conn,并在编译时确定是否必须包含pkg.v3pkg.v4。这可能吗?

如果没有,那么另一个思考过程是创建一个新的本地包pkgconn将使用)并在{{pkg_v3.gopkg_v4.go中有两个文件1}}可以根据构建标记进行编译。在这方面,如何自动从pkgpkg.v3 or pkg.v4公开部分/全部功能。

我们希望避免重复整个pkg包只是为了改变这一行connpkg.v3

1 个答案:

答案 0 :(得分:1)

我不会为此使用构建标记,你需要在同一个函数中调用不同的版本吗?

您仍然可以加载多个包并使用不同的别名(例如,this package可能会出现这种情况)。

import(
    pkgVersionA "gopkg.in/db/pkg.v1"
    pkgVersionB "gopkg.in/db/pkg.v2"
)

...
func connect() {
   y := pkgVersionA.New()
   x := pkgVersionB.New()
   ...
}