func (group *RouterGroup) DELETE(relativePath, routeName string, handlers ...HandlerFunc) IRoutes {
	return group.handle(http.MethodDelete, relativePath, routeName, handlers)
}
DELETE is a shortcut for router.Handle("DELETE", path, handle).
package gin
import (
	"net/http"
	"path"
	"regexp"
	"strings"
)
var (
	regEnLetter = regexp.MustCompile("^[A-Z]+$")
)
type IRouter interface {
	IRoutes
	Group(string, ...HandlerFunc) *RouterGroup
}
type IRoutes interface {
	Use(...HandlerFunc) IRoutes
	Handle(string, string, string, ...HandlerFunc) IRoutes
	Any(string, string, ...HandlerFunc) IRoutes
	GET(string, string, ...HandlerFunc) IRoutes
	POST(string, string, ...HandlerFunc) IRoutes
	DELETE(string, string, ...HandlerFunc) IRoutes
	PATCH(string, string, ...HandlerFunc) IRoutes
	PUT(string, string, ...HandlerFunc) IRoutes
	OPTIONS(string, string, ...HandlerFunc) IRoutes
	HEAD(string, string, ...HandlerFunc) IRoutes
	StaticFile(string, string) IRoutes
	Static(string, string) IRoutes
	StaticFS(string, http.FileSystem) IRoutes
}
type RouterGroup struct {
	Handlers HandlersChain
	basePath string
	engine   *Engine
	root     bool
}
var _ IRouter = &RouterGroup{}
func (group *RouterGroup) Use(middleware ...HandlerFunc) IRoutes {
	group.Handlers = append(group.Handlers, middleware...)
	return group.returnObj()
}
func (group *RouterGroup) Group(relativePath string, handlers ...HandlerFunc) *RouterGroup {
	return &RouterGroup{
		Handlers: group.combineHandlers(handlers),
		basePath: group.calculateAbsolutePath(relativePath),
		engine:   group.engine,
	}
}
func (group *RouterGroup) BasePath() string {
	return group.basePath
}
func (group *RouterGroup) handle(httpMethod, relativePath, routeName string, handlers HandlersChain) IRoutes {
	absolutePath := group.calculateAbsolutePath(relativePath)
	handlers = group.combineHandlers(handlers)
	group.engine.addRoute(httpMethod, absolutePath, routeName, handlers)
	return group.returnObj()
}
func (group *RouterGroup) Handle(httpMethod, relativePath, routeName string, handlers ...HandlerFunc) IRoutes {
	if matched := regEnLetter.MatchString(httpMethod); !matched {
		panic("http method " + httpMethod + " is not valid")
	}
	return group.handle(httpMethod, relativePath, routeName, handlers)
}
func (group *RouterGroup) POST(relativePath, routeName string, handlers ...HandlerFunc) IRoutes {
	return group.handle(http.MethodPost, relativePath, routeName, handlers)
}
func (group *RouterGroup) GET(relativePath, routeName string, handlers ...HandlerFunc) IRoutes {
	return group.handle(http.MethodGet, relativePath, routeName, handlers)
}