Этот вопрос проверяет знание структурирования Go-проектов с точки зрения архитектурного подхода.
Папка cmd содержит точку входа в приложение, adapters — реализацию зависимостей (например, БД), а delivery — слой доставки (например, REST, gRPC). Такое разделение упрощает поддержку и масштабирование проекта.
Go-проекты часто структурируются по архитектурным слоям: домен, инфраструктура, представление.
cmd/:
Точки входа (main.go) для различных приложений или сервисов.
Пример: cmd/api/main.go, cmd/worker/main.go.
adapters/:
Инфраструктурные адаптеры, реализующие интерфейсы домена.
Примеры: база данных (postgres_adapter.go), API-клиенты.
delivery/:
Слой взаимодействия с внешним миром: HTTP, gRPC, CLI.
Обычно содержит контроллеры, маршруты, сериализацию.
Дополнительно:
internal/ — приватный код.
pkg/ — общедоступные библиотеки.
domain/ — бизнес-логика и интерфейсы.
/cmd/api/main.go
/internal/adapters/postgres/user_repo.go
/internal/delivery/http/handlers.go
/internal/domain/user.goВывод:
Такая структура повышает модульность, облегчает тестирование и соблюдение принципов чистой архитектуры.