循环依赖关系和接口

我是一个长期的python开发人员。我正在尝试Go,将现有的python应用程序转换为Go。它是模块化的,对我来说真的很好用。


在Go中创建相同的结构后,我似乎陷入了周期性的导入错误,这比我想要的要多得多。从未在python中出现任何导入问题。我什至不必使用导入别名。所以我可能有一些周期性的进口,这在python中是不明显的。我实际上发现那个奇怪。


无论如何,我迷路了,试图在Go中修复这些问题。我读过接口可以用来避免循环依赖。但是我不知道如何。我也没有找到任何例子。有人可以帮我吗?


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


/main.py


/settings/routes.py      contains main routes depends on app1/routes.py, app2/routes.py etc

/settings/database.py    function like connect() which opens db session

/settings/constants.py   general constants


/apps/app1/views.py      url handler functions

/apps/app1/models.py     app specific database functions depends on settings/database.py

/apps/app1/routes.py     app specific routes


/apps/app2/views.py      url handler functions

/apps/app2/models.py     app specific database functions depends on settings/database.py

/apps/app2/routes.py     app specific routes

settings/database.py具有诸如connect()打开数据库会话之类的通用功能。因此,应用程序包中的一个应用程序将调用database.connect()并打开数据库会话。


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


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


慕村9548890
浏览 544回答 3
3回答

蓝山帝景

基本上,您的代码是高度耦合的,Golang强制您使程序包保持低耦合,但是在程序包中,高内聚性很好。与python相比,Golang在软件包管理方面要优越得多。在python中,您甚至可以动态导入包。对于大型项目,golang将确保您的软件包更易于维护。

胡说叔叔

再说一下低级部分,我的意思是说,它settings提供了所有应用程序都将基于的基本实用程序(例如,数据库访问)。在这种情况下,settings应通过进口app1,app2等等,但它永远也不应该将其导入。(您可能还想将其重命名settings为类似的东西utils,甚至将其分解成单独的包,但这些都是单独的想法。)
打开App,查看更多内容
随时随地看视频慕课网APP