Для чего нужны папки cmd, adapters и delivery в Go-проекте?

Роль папок в Go-проекте: cmd, adapters и delivery Разделение кода по зонам ответственности cmd: точка запуска и основной исполняемый файл adapters: связь с внешними системами (БД, API, сервисы) delivery: передача…

Короткий ответ

Что ответить на собеседовании

Роль папок в Go-проекте: cmd, adapters и delivery Разделение кода по зонам ответственности cmd: точка запуска и основной исполняемый файл adapters: связь с внешними системами (БД, API, сервисы) delivery: передача данных и обработка запросов (HTTP, GRPC) Ясное разделение слоев улучшает поддерживаемость и тестируемость Подход соответствует принципам Clean Architecture / Hexagonal Architecture Такая структура упрощает масштабирование и изоляцию зависимостей

Подробный разбор

Ответ с пояснениями

Роль папок в Go-проекте: cmd, adapters и delivery

  • Разделение кода по зонам ответственности
  • cmd: точка запуска и основной исполняемый файл
  • adapters: связь с внешними системами (БД, API, сервисы)
  • delivery: передача данных и обработка запросов (HTTP, GRPC)
  • Ясное разделение слоев улучшает поддерживаемость и тестируемость
  • Подход соответствует принципам Clean Architecture / Hexagonal Architecture
  • Такая структура упрощает масштабирование и изоляцию зависимостей

Развернутый ответ

Основной ответ

В Go-проекте каталоги cmd, adapters и delivery нередко применяют для распределения кода в соответствии с принципами чистой архитектуры или hexagonal architecture. Это позволяет отделить бизнес-логику от инфраструктурных компонентов.

  • В каталоге cmd размещаются точки запуска приложения — исполняемые программы. Как правило, для каждой команды или сервиса создается отдельный подкаталог. - Каталог adapters представляет слой адаптеров. Он преобразует данные и интерфейсы, обеспечивая взаимодействие внешних систем с внутренним ядром приложения. - За конкретные способы доставки данных отвечает каталог delivery. В нем реализуются механизмы взаимодействия с пользователем или другими системами, например HTTP handlers, gRPC и CLI.

Основные моменты

  • cmd задает точку запуска приложения: каждый подкаталог внутри него формирует отдельный бинарный файл. Например, cmd/api содержит основной HTTP-сервер.
  • В adapters сосредоточена интеграционная логика: подключения к базам данных, внешним API и брокерам сообщений. Благодаря этому ядро приложения не зависит напрямую от конкретных технологий.
  • Слой delivery отвечает за коммуникацию с внешним миром — например, через REST-контроллеры, WebSocket или CLI-интерфейс — и преобразует входящие запросы в вызовы бизнес-логики.

Практический контекст

Подобная организация поддерживает чистоту архитектуры: ядро (core) не зависит от технологий, а внешние детали — инфраструктура и интерфейсы — распределены по понятным слоям. В проектах на Go 1.18+ такой подход часто дополняется интерфейсами и пакетами, что способствует тестируемости и масштабируемости.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку