Skip to content

Пакет 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.