func (r *Router) HandleFunc(path string, handler http.HandlerFunc, httpMethods ...string) *Trie {
	return r.Handle(path, handler, httpMethods...)
}
HandleFunc add a route to the router (path, http.HandlerFunc, methods)
package violetear
import (
	"context"
	"fmt"
	"log"
	"net/http"
	"strings"
)
const (
	ParamsKey     key = 0
	versionHeader     = "application/vnd."
)
type key int
type Router struct {
	dynamicRoutes dynamicSet
	routes *Trie
	Logger func(*ResponseWriter, *http.Request)
	LogRequests bool
	NotFoundHandler http.Handler
	NotAllowedHandler http.Handler
	PanicHandler http.HandlerFunc
	RequestID string
	Verbose bool
	err error
}
func New() *Router {
	return &Router{
		dynamicRoutes: dynamicSet{},
		routes:        &Trie{},
		Logger:        logger,
		Verbose:       true,
	}
}
func (r *Router) Handle(path string, handler http.Handler, httpMethods ...string) *Trie {
	var version string
	if i := strings.Index(path, "#"); i != -1 {
		version = path[i+1:]
		path = path[:i]
	}
	pathParts := r.splitPath(path)
	for _, p := range pathParts {
		if strings.HasPrefix(p, ":") {
			if _, ok := r.dynamicRoutes[p]; !ok {
				r.err = fmt.Errorf("[%s] not found, need to add it using AddRegex(%q, `your regex`", p, p)
				return nil
			}
		}
	}
	methods := "ALL"
	if len(httpMethods) > 0 && len(strings.TrimSpace(httpMethods[0])) > 0 {
		methods = httpMethods[0]
	}
	if r.Verbose {
		log.Printf("Adding path: %s [%s] %s", path, methods, version)
	}
	trie, err := r.routes.Set(pathParts, handler, methods, version)
	if err != nil {
		r.err = err
		return nil
	}
	return trie
}