Роль папок в Go-проекте: cmd, adapters и delivery Разделение кода по зонам ответственности cmd: точка запуска и основной исполняемый файл adapters: связь с внешними системами (БД, API, сервисы) delivery: передача данных и обработка запросов (HTTP, GRPC) Ясное разделение слоев улучшает поддерживаемость и тестируемость Подход соответствует принципам Clean Architecture / Hexagonal Architecture Такая структура упрощает масштабирование и изоляцию зависимостей
Для чего нужны папки 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 нередко применяют для распределения кода в соответствии с принципами чистой архитектуры или hexagonal architecture. Это позволяет отделить бизнес-логику от инфраструктурных компонентов.
- В каталоге cmd размещаются точки запуска приложения — исполняемые программы. Как правило, для каждой команды или сервиса создается отдельный подкаталог. - Каталог adapters представляет слой адаптеров. Он преобразует данные и интерфейсы, обеспечивая взаимодействие внешних систем с внутренним ядром приложения. - За конкретные способы доставки данных отвечает каталог delivery. В нем реализуются механизмы взаимодействия с пользователем или другими системами, например HTTP handlers, gRPC и CLI.
Основные моменты
- cmd задает точку запуска приложения: каждый подкаталог внутри него формирует отдельный бинарный файл. Например,
cmd/apiсодержит основной HTTP-сервер. - В adapters сосредоточена интеграционная логика: подключения к базам данных, внешним API и брокерам сообщений. Благодаря этому ядро приложения не зависит напрямую от конкретных технологий.
- Слой delivery отвечает за коммуникацию с внешним миром — например, через REST-контроллеры, WebSocket или CLI-интерфейс — и преобразует входящие запросы в вызовы бизнес-логики.
Практический контекст
Подобная организация поддерживает чистоту архитектуры: ядро (core) не зависит от технологий, а внешние детали — инфраструктура и интерфейсы — распределены по понятным слоям. В проектах на Go 1.18+ такой подход часто дополняется интерфейсами и пакетами, что способствует тестируемости и масштабируемости.