Проектирование Go-приложений
Как организовать сервис так, чтобы он был тестируемым, наблюдаемым и эволюционировал без лишней сложности.
Результат модуля
После модуля вы можете объяснить ключевые понятия, выбрать подход под условия задачи и показать это на коде, запросе или архитектурной схеме.
Темы
- cmd/, internal/, pkg/; организация по слоям и по фичам; package boundaries.
- Clean/Hexagonal architecture, domain/application/infrastructure/delivery; ручной DI и composition root.
- HTTP/gRPC transport: validation, error mapping, request ID, pagination, idempotency key, versioning.
- Repository pattern и транзакционные границы: где он полезен, а где скрывает SQL.
- Background jobs, retry, jitter, DLQ, idempotent consumer и graceful shutdown.
- Configuration, secrets, feature flags и twelve-factor principles.
Минимум для E4
- Знать определения без заученных «магических» формулировок.
- Объяснять ограничения каждого подхода и называть минимум одну альтернативу.
- Приводить практический пример: код, схема, запрос или production-сценарий.
- Учитывать ошибки, наблюдаемость и безопасный rollout там, где это применимо.
Углубление для E5/Senior
- Оценивать масштаб, стоимость, эксплуатационные риски и совместимость изменений.
- Проектировать постепенную эволюцию решения, а не только целевую схему.
- Защищать решение через требования и измеримые trade-offs.
Типовые вопросы
- Где должна начинаться и заканчиваться DB transaction?
- Подготовьте ответ с примером из production или практики.
- Как не допустить повторное создание заказа при retry клиента?
- Подготовьте ответ с примером из production или практики.
- Почему интерфейс нужно определять у потребителя зависимости?
- Подготовьте ответ с примером из production или практики.
Практика
- Спроектируйте сервис заказов с HTTP API, PostgreSQL, outbox и фоновым воркером.
- Сформулируйте три частые ошибки по модулю и признаки их проявления.
- Добавьте в личные карточки определения и решения, которые не удалось воспроизвести без подсказки.
Связанные темы
Главная · Go · PostgreSQL · System Design · Интервью-практика
Источники
- Официальная документация используемого языка, БД или платформы.
- Production-документация команды и проверенные технические разборы.
- Конкретные ссылки добавляйте при наполнении темы, вместе с датой проверки актуальности.