12 вопросов
Паттерны проектирования в Go: Functional Options, Worker Pool, Fan-in/Fan-out, Pipeline, Circuit Breaker, Retry с backoff, Dependency Injection, Middleware, Singleflight.
Layered architecture делит приложение на слои с четкими обязанностями: handler принимает запросы, service содержит логику, repository работает с данными. Каждый слой зависит только от нижнего.
Подробнее →Functional Options позволяет передавать опции в конструктор через функции (WithTimeout, WithLogger), давая гибкий и расширяемый API.
Подробнее →Worker pool - это N горутин, читающих задачи из одного канала; ограничивает параллелизм и предсказуемо нагружает систему.
Подробнее →Fan-in - объединение нескольких каналов в один; данные из многих источников поступают в один общий канал.
Подробнее →Fan-out - один канал-источник читается несколькими горутинами; каждая задача обрабатывается одним из воркеров.
Подробнее →Pipeline - цепочка этапов, связанных каналами; каждый этап читает из канала и пишет в следующий.
Подробнее →Exponential backoff увеличивает паузу между повторами (1s, 2s, 4s...), снижая нагрузку на сервис.
Подробнее →Зависимости описываются интерфейсами, конкретные реализации передаются в конструктор; тесты подставляют моки.
Подробнее →Middleware - func(http.Handler) http.Handler; оборачивает следующий handler и при необходимости вызывает его.
Подробнее →Clean Architecture и Hexagonal Architecture ставят бизнес-логику в центр, изолируя её от инфраструктуры (БД, HTTP, внешних API) через интерфейсы. Зависимости всегда направлены к домену.
Подробнее →Circuit Breaker при серии ошибок переходит в Open (не вызывает сервис); после таймаута пробует снова (Half-Open); при успехе - Closed.
Подробнее →Singleflight объединяет конкурентные запросы с одним ключом в один вызов; остальные ждут и делят результат.
Подробнее →