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

标签 go

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

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

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

由于我的库已经被许多客户使用,为了兼容性我仍然想维护一个 foobar 包作为 foo

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

想到的一种方法是在 foobar 中为 foobar 中的每个结构/函数创建别名。所以如果 foo 定义了 F()bar 定义了 B(),我会在 foobar :

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

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

最佳答案

创建别名包是唯一的方法。 但是您的尝试可能不会奏效:它仅适用于函数、变量和常量,但不适用于类型。对于类型,您必须复制 foobar 中的类型。

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

关于go - 如何在不破坏客户端代码的情况下拆分大包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36279718/

相关文章:

go - 在 go 中的包内共享变量

go - 如何在 Go 中的结构内初始化嵌套映射?

html - 在 Go 中从 html 页面中提取文本

Gorilla Websocket 手动关闭客户端连接

reflection - 是否可以在 go 中动态创建带有接收器(方法)的函数?

json - 使用单个表绑定(bind)数组/结构中的多个列

go - 使用结构对常量进行分组有哪些副作用

go - 如何在 n--n 关系中避免 "import cycle"

sql - 为什么QueryRow()。Scan()在表中不为空时返回空字符串?

json - json.RawMessage 编码(marshal)