如何在不破坏客户端代码的情况下拆分大包?

时间:2016-03-29 08:58:56

标签: go

假设我有一个名为 foobar 的库包。

随着时间的推移它变得又大又重。

幸运的是,它是可分的,我设法将其功能分为两个单独的包 foo bar - 大多数客户只需要使用其中一个。

由于我的库已被许多客户使用,为了兼容性,我仍然希望维护一个 foobar 包作为 foo 中当前功能的代理,的

如何在Go中实现这一目标?

想到的一种方法是为 foo bar 中的每个结构/功能在 foobar 中创建别名。因此,如果 foo 定义F() bar 定义B(),我会在 foobar

var (
  F = foo.F
  B = bar.B
)

但我希望有一种更简单/更清洁的方式。

1 个答案:

答案 0 :(得分:6)

创建别名包是唯一的方法。 但是你的尝试可能不起作用:它只适用于函数和变量和consts,但不适用于类型。对于类型,您必须在foobar中复制类型。

我不会这样做。只需在版本1中使用foobar,然后使用foo和bar重新开始(可能直接在版本2中)。