Skip to content

Instantly share code, notes, and snippets.

@zikes
Forked from elithrar/use.go
Created May 23, 2014 02:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save zikes/764ca55a2e8b19a4a743 to your computer and use it in GitHub Desktop.
Save zikes/764ca55a2e8b19a4a743 to your computer and use it in GitHub Desktop.
r := mux.NewRouter()
// Single handler
r.HandleFunc("/form", use(http.HandlerFunc(formHandler), csrf, logging,)
// All handlers
http.Handle("/", recovery(r))
// Sub-routers
apiMiddleware := []func(http.Handler) http.Handler{logging, apiAuth, json}
api := router.PathPrefix("/api").SubRouter()
api.Handle("/users", use(usersHandler, apiMiddleware...))
// Middleware chainer
func use(h http.Handler, middleware ...func(http.Handler) http.Handler) http.Handler {
for _, m := range middleware {
h = m(h)
}
return h
}
// Middleware (just a http.Handler)
func csrf(h http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
// do stuff
h.ServeHTTP(w, r)
// do stuff after
})
}
// Basic handler at the end of it all.
func formHandler(w http.ResponseWriter, r *http.Request) {
// do stuff
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment