func (r *Router) HEAD(path string, handle http.HandlerFunc) {
	r.Handle(http.MethodHead, path, handle)
}
HEAD adds the route `path` that matches a HEAD http method to
execute the `handle` http.HandlerFunc.
package gorouter
import (
	"context"
	"errors"
	"fmt"
	"net/http"
	"regexp"
	"strings"
)
var (
	ErrGenerateParameters = errors.New("params contains wrong parameters")
	ErrNotFoundRoute = errors.New("cannot find route in tree")
	ErrNotFoundMethod = errors.New("cannot find method in tree")
	ErrPatternGrammar = errors.New("pattern grammar error")
	defaultPattern = `[\w]+`
	idPattern      = `[\d]+`
	idKey          = `id`
	methods = map[string]struct{}{
		http.MethodGet:    {},
		http.MethodPost:   {},
		http.MethodPut:    {},
		http.MethodDelete: {},
		http.MethodPatch:  {},
		http.MethodHead:   {},
	}
)
type (
	MiddlewareType func(next http.HandlerFunc) http.HandlerFunc
	Router struct {
		prefix string
		middleware []MiddlewareType
		trees      map[string]*Tree
		parameters Parameters
		notFound http.HandlerFunc
		PanicHandler func(w http.ResponseWriter, req *http.Request, err interface{})
	}
	Parameters struct {
		routeName string
	}
)
func New() *Router {
	return &Router{
		trees: make(map[string]*Tree),
	}
}
func (r *Router) GET(path string, handle http.HandlerFunc) {
	r.Handle(http.MethodGet, path, handle)
}
func (r *Router) POST(path string, handle http.HandlerFunc) {
	r.Handle(http.MethodPost, path, handle)
}
func (r *Router) DELETE(path string, handle http.HandlerFunc) {
	r.Handle(http.MethodDelete, path, handle)
}
func (r *Router) PUT(path string, handle http.HandlerFunc) {
	r.Handle(http.MethodPut, path, handle)
}
func (r *Router) PATCH(path string, handle http.HandlerFunc) {
	r.Handle(http.MethodPatch, path, handle)
}