🟡 Средний · 2 очк. Стандартная библиотека
Какой паттерн используется для HTTP middleware в Go?
A http.Middleware интерфейс
B func(http.Handler) http.Handler
C http.Use(handler)
D Декоратор @middleware
Объяснение вопроса

Middleware в Go - это функция вида func(http.Handler) http.Handler: принимает следующий обработчик и возвращает новый, который может выполнить логику до и после вызова next.ServeHTTP.

func Log(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        log.Println(r.URL.Path)
        next.ServeHTTP(w, r)
    })
}
handler := Log(Auth(realHandler))

Цепочка

Обработчики оборачивают друг друга: логирование, аутентификация, сжатие, метрики. Запрос проходит по цепочке внутрь, ответ идёт обратно. Один и тот же паттерн используется во многих фреймворках поверх net/http.

🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.