Что такое middleware в Go?

Middle
1.3k просмотров
AFK Offer AI

Middleware — функция, которая оборачивает HTTP-хендлер, добавляя логику до/после обработки запроса.

func loggingMiddleware(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        start := time.Now()
        next.ServeHTTP(w, r) // вызываем следующий хендлер
        log.Printf("%s %s %v", r.Method, r.URL.Path, time.Since(start))
    })
}

func authMiddleware(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { token := r.Header.Get("Authorization") if token == "" { http.Error(w, "unauthorized", 401) return // НЕ вызываем next } next.ServeHTTP(w, r) }) }

Цепочка middleware:

handler := loggingMiddleware(authMiddleware(myHandler))
http.ListenAndServe(":8080", handler)

Это паттерн «decorator». Каждый middleware — слой луковицы.

Следующий вопрос

Что такое stack vs heap allocation?