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  }