Created
November 14, 2020 15:35
-
-
Save arouene/b2b7bff0b1947293fb64a1ba08b51f84 to your computer and use it in GitHub Desktop.
Golang http muxer with middleware support
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package mux | |
import ( | |
"fmt" | |
"net/http" | |
) | |
type Middleware struct { | |
mux *http.ServeMux | |
middlewares [](func(http.Handler) http.Handler) | |
} | |
func NewServeMux() Middleware { | |
return Middleware{ | |
mux: http.NewServeMux(), | |
} | |
} | |
func (m *Middleware) AddMiddleware(handler func(http.Handler) http.Handler) { | |
m.middlewares = append(m.middlewares, handler) | |
} | |
func (m Middleware) Route(pattern string, f func(m *Middleware, prefix string) http.Handler) { | |
newMux := NewServeMux() | |
for _, h := range m.middlewares { | |
newMux.AddMiddleware(h) | |
} | |
m.mux.Handle(pattern, f(&newMux, pattern)) | |
} | |
func (m Middleware) Handle(pattern string, handler func(http.ResponseWriter, *http.Request)) { | |
var newHandler http.Handler = http.HandlerFunc(handler) | |
for _, h := range m.middlewares { | |
newHandler = h(newHandler) | |
} | |
m.mux.Handle(pattern, newHandler) | |
} | |
func (m Middleware) ServeHTTP(w http.ResponseWriter, r *http.Request) { | |
m.mux.ServeHTTP(w, r) | |
} | |
func (m Middleware) Error(w http.ResponseWriter, error string, code int) { | |
w.Header().Set("X-Content-Type-Options", "nosniff") | |
w.WriteHeader(code) | |
fmt.Fprintln(w, error) | |
} | |
func (m Middleware) Write(w http.ResponseWriter, msg string, args ...interface{}) { | |
fmt.Fprintf(w, msg, args...) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment