Golang中的循环依赖和接口 [英] Cyclic dependencies and interfaces in Golang

查看:110
本文介绍了Golang中的循环依赖和接口的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是一个很长时间的Python开发者。我正在尝试Go,将现有的Python应用程序转换为Go。它是模块化的,对我来说效果非常好。



在Go中创建相同的结构后,我似乎陷入循环导入错误,比我想要的要多得多。 python中从来没有任何导入问题。我甚至从来不需要使用导入别名。所以我可能有一些循环进口,这在python中并不明显。我其实觉得很奇怪。

无论如何,我迷路了,试图在Go中解决这些问题。我已经读过,接口可以用来避免循环依赖。但我不明白如何。我也没有在这方面找到任何例子。有人可以帮我解决这个问题吗?



当前的python应用程序结构如下:

  /main.py 

/settings/routes.py包含主要路线取决于app1 / routes.py,app2 / routes.py等
/settings/database.py像connect()这样打开数据库会话
/settings/constants.py常规常量

/apps/app1/views.py url处理函数
/ apps / app1 / models .py应用程序特定的数据库函数取决于settings / database.py
/apps/app1/routes.py特定应用程序的路线

/apps/app2/views.py url处理函数
/apps/app2/models.py应用程序特定的数据库函数取决于设置/ database.py
/apps/app2/routes.py应用程序特定的路线
$ b

settings / database.py 具有通用函数,如 connect()它打开一个数据库会话。因此,应用程序包中的应用程序会调用 database.connect()并打开db会话。

settings / routes.py 的情况也是如此,它具有允许应用程序添加其子菜单的功能,路由到主要路由对象。

设置包更多的是关于函数而不是数据/常量。这包含应用程序包中的应用程序使用的代码,否则这些代码必须在所有应用程序中重复使用。因此,如果我需要更改路由器类,例如,我只需要更改 settings / router.py ,这些应用程序将继续工作而不做任何修改。

解决方案

有两个高层次的内容:找出哪些代码放在哪个包中,并调整API以减少软件包承担尽可能多的依赖性的需要。



在设计API时避免需要进行一些导入:

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆