Приведи пример использования middleware

«Приведи пример использования middleware» — вопрос из категории Архитектура, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Middleware в Go — это функция, которая обрабатывает запрос до или после основного обработчика. Обычно используется в веб-фреймворках (например, Gin, Echo) для логирования, аутентификации, сжатия данных и т.д.

Пример с net/http:

func loggingMiddleware(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        log.Println("Request received:", r.URL.Path)
        next.ServeHTTP(w, r) // передаем управление следующему обработчику
        log.Println("Request processed")
    })
}

func main() {
    mux := http.NewServeMux()
    mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        w.Write([]byte("Hello World"))
    })

    wrappedMux := loggingMiddleware(mux)
    http.ListenAndServe(":8080", wrappedMux)
}

Middleware работает как цепочка: каждый слой может модифицировать запрос/ответ или прервать выполнение. Порядок middleware важен!