Я давно разработчик python. Я пробовал Go, конвертируя существующее приложение python в Go. Он модульный и отлично работает для меня.
Создав ту же структуру в Go, я, кажется, приземляюсь в циклических импортных ошибках, намного больше, чем я хочу. Никогда не было проблем с импортом в 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()
, который открывает сеанс db. Таким образом, приложение в пакете приложений вызывает database.connect()
, и открывается сеанс db.
То же самое происходит с settings/routes.py
, он имеет функции, которые позволяют приложениям добавлять свои подпункты к основному объекту маршрута.
Пакет настроек - это больше функций, чем данных/констант. Это код, который используется приложениями в пакете приложений, которые в противном случае должны были бы дублироваться во всех приложениях. Поэтому, если мне нужно изменить класс маршрутизатора, например, мне просто нужно изменить settings/router.py
, и приложения будут продолжать работать без каких-либо изменений.