🟡 Средний · 2 очк. Паттерны проектирования
Как реализуется цепочка middleware для HTTP в Go?
A Middleware - функция func(http.Handler) http.Handler; оборачивает следующий обработчик
B Через наследование от базового Handler
C Через глобальный список middleware в http.Server
D Через отдельный пакет middleware из стандартной библиотеки
Объяснение вопроса

HTTP middleware в Go реализуется как функция типа func(http.Handler) http.Handler. Она принимает следующий обработчик (next) и возвращает новый http.Handler.

func logging(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        log.Println(r.Method, r.URL.Path)
        next.ServeHTTP(w, r)
    })
}
// цепочка: logging(auth(http.HandlerFunc(indexHandler)))

Роутеры вроде chi позволяют вешать цепочки на маршруты: r.Use(logging, auth).

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