【发布时间】:2020-02-13 05:41:02
【问题描述】:
我知道这被问了很多,但我仍然不明白如何解决它。假设我有这个结构:
foo
- foos.go // custom foo type
database
- database.go // interface
- postgres.go // implementation
在database.go我需要导入foo,所以我可以saveOnDb(foo.myfoo),在foos.go我需要导入database,所以我可以database.saveOnDb(myfoo)。
由于导入周期,这无法编译。正确的设计应该是什么?
【问题讨论】:
-
将你的类型放在一个单独的共享包中,没有依赖关系。
-
为什么它们需要是单独的包,或者你为什么要在两个不同的包中做同样的事情?
-
@JimB 我有很多包,它们都需要在数据库中保存东西。你是说最好将
database接口分解成每个只保存自己的东西的包,而不是只有一个集中的数据库包? -
@Flimzy 谢谢,这是有道理的。阅读您的其他评论,我想知道为什么将不同的包耦合到共享类型包比跨包传播 db 代码更好?
-
为什么
foo打电话给database.saveOnDb?通常你会有一些依赖于这两个包的东西,这样它就可以使用foo类型并将其保存到数据库中。但信息如此之少,很难提供很多建议。
标签: go design-patterns circular-dependency