Пакет internal
Папка internal в проекте на языке Go служит для хранения пакетов, которые не предназначены для использования вне проекта и могут использоваться только внутри него.
Использование папки internal позволяет изолировать реализацию и улучшить безопасность кода. А также помогает улучшить читаемость кода и упростить его поддержку, так как разработчики могут легко отличать внутренние пакеты от публичных пакетов, которые могут использоваться вне проекта.
В целом, папка internal является важным компонентом хорошо организованной структуры проекта на языке Go и помогает улучшить качество кода и эффективность разработки.
В данном пакете присутствуют следующие папки:
db — пакет, отвечающий за конфигурацию соединений с базами данных.
docs — папка, отвечающая за документацию Swagger.
Infrastructure — несет ответственность за неизменяемую часть кода в проекте, например такую, как старт веб-сервера или мигратор. Изменения в данной части пакета вносятся только в общие изменения для всех проектов. По-хорошему, этот пакет должен быть внешним и должен располагаться в отдельном репозитории. Отвечать за него будут ответственные за инфраструктуру.
modules — папка, отвечающая за отдельный модуль в проекте, например за модуль авторизации, в котором будут присутствовать 3 сущности:
-
controller (presenter) — не совсем presenter, так как выполняет и другие функции, например валидацию запросов или пользовательских данных, формирование JSON.
-
service (use cases) — бизнес-логика, самый главный слой в приложении. В нем изолированно хранится логика приложения вне зависимости от того, как хранятся или отображаются данные.
-
storage (repository) — хранилище данных, построенное по типу repository.
Проект разбивается на модули, для того чтобы его отдельные части не были сильно связаны. Так как все модули независимы, их легко переносить из проекта в проект.
models — shared, папка моделек, или, по-другому, entity. Пакет, нарушающий концепцию слабой связанности в проекте, но способствующий принципу DRY (do not repeat yourself), чтобы не дублировать смежные сущности между модулями. Файлы с постфиксом “_dto” являются табличными представлениями.
provider — пакет с различными внешними провайдерами, sms, email, различными API.
router — в данном пакете хранится роутер, основанный на библиотеке go-chi/chi. Это очень удобная библиотека. Ее отличает понятный интерфейс, который легко интегрировать в любой проект, а также производительность выше среднего уровня (среди типичных библиотек).
storages — единая точка регистрации всех хранилищ, используемая для удобного dependency injection.