package mux import "net/http" type Mux struct { http.ServeMux middlewares []Middleware groups map[string]*Mux } func New() *Mux { return &Mux{ ServeMux: http.ServeMux{}, middlewares: []Middleware{}, groups: map[string]*Mux{}, } } func (m *Mux) ServeHTTP(w http.ResponseWriter, r *http.Request) { for path, g := range m.groups { m.Handle(path, g) } h := http.Handler(&m.ServeMux) for _, mw := range m.middlewares { h = mw(h) } h.ServeHTTP(w, r) }