github.com/unionj-cloud/go-doudou@v1.3.8-0.20221011095552-0088008e5b31/framework/http/httprouter/routegroup.go (about) 1 package httprouter 2 3 import ( 4 "github.com/unionj-cloud/go-doudou/toolkit/stringutils" 5 "net/http" 6 ) 7 8 type RouteGroup struct { 9 r *Router 10 p string 11 } 12 13 func validatePath(path string) { 14 if stringutils.IsEmpty(path) { 15 panic("path should not be empty") 16 } 17 if path[0] != '/' { 18 panic("path must start with a '/'") 19 } 20 } 21 22 func newRouteGroup(r *Router, path string) *RouteGroup { 23 validatePath(path) 24 25 //Strip traling / (if present) as all added sub paths must start with a / 26 if path[len(path)-1] == '/' { 27 path = path[:len(path)-1] 28 } 29 return &RouteGroup{r: r, p: path} 30 } 31 32 func (r *RouteGroup) NewGroup(path string) *RouteGroup { 33 return newRouteGroup(r.r, r.subPath(path)) 34 } 35 36 func (r *RouteGroup) Handle(method, path string, handle Handle, name ...string) { 37 r.r.Handle(method, r.subPath(path), handle, name...) 38 } 39 40 func (r *RouteGroup) Handler(method, path string, handler http.Handler, name ...string) { 41 r.r.Handler(method, r.subPath(path), handler, name...) 42 } 43 44 func (r *RouteGroup) HandlerFunc(method, path string, handler http.HandlerFunc, name ...string) { 45 r.r.HandlerFunc(method, r.subPath(path), handler, name...) 46 } 47 48 func (r *RouteGroup) GET(path string, handle Handle) { 49 r.Handle("GET", path, handle) 50 } 51 func (r *RouteGroup) HEAD(path string, handle Handle) { 52 r.Handle("HEAD", path, handle) 53 } 54 func (r *RouteGroup) OPTIONS(path string, handle Handle) { 55 r.Handle("OPTIONS", path, handle) 56 } 57 func (r *RouteGroup) POST(path string, handle Handle) { 58 r.Handle("POST", path, handle) 59 } 60 func (r *RouteGroup) PUT(path string, handle Handle) { 61 r.Handle("PUT", path, handle) 62 } 63 func (r *RouteGroup) PATCH(path string, handle Handle) { 64 r.Handle("PATCH", path, handle) 65 } 66 func (r *RouteGroup) DELETE(path string, handle Handle) { 67 r.Handle("DELETE", path, handle) 68 } 69 70 func (r *RouteGroup) subPath(path string) string { 71 validatePath(path) 72 return r.p + path 73 }