Skip to content

Instantly share code, notes, and snippets.

@andboson
Last active February 12, 2026 08:38
Show Gist options
  • Select an option

  • Save andboson/41370995f45d4807fbaee59c66b270cd to your computer and use it in GitHub Desktop.

Select an option

Save andboson/41370995f45d4807fbaee59c66b270cd to your computer and use it in GitHub Desktop.
Golang route groups with http.Mux
...............................
mux := http.NewServeMux()
mux.Handle("/healthz", server.healthCheckHandler())
mux.Handle("/metrics", server.metrics.GetHandler())
middlewares := []func(http.Handler) http.Handler{
server.checkAuth,
server.handlePost,
server.logRequest,
server.recoverPanic,
server.timeoutHandler,
}
groupMux := newGroup(mux, "/api/v1/", middlewares...)
groupMux.Handle("/getPosts", server.getPostsHandler())
server.server = &http.Server{
Handler: mux,
ReadHeaderTimeout: readHeaderTimeout,
}
// continue init
}
func newGroup(mux *http.ServeMux, pattern string, middlewares ...func(http.Handler) http.Handler) *http.ServeMux {
grGroup := http.NewServeMux()
subPattern := strings.TrimSuffix(pattern, "/")
handler := http.StripPrefix(subPattern, grGroup)
for _, middleware := range middlewares {
handler = middleware(handler)
}
mux.Handle(pattern, handler)
return grGroup
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment