Ответ
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 важен!