func NewPath(path string) Path {
	if !strings.HasPrefix(path, "/") {
		path = "/" + path
	}
	return Path(path)
}
Path -----------------------------------------------------------------------
NewPath returns a static URL path matcher.
package reverse
import (
	"net/http"
	"net/url"
	"strings"
)
type Result struct {
	Handler http.Handler
	Values  url.Values
}
type Matcher interface {
	Match(*http.Request) bool
}
type Extractor interface {
	Extract(*Result, *http.Request)
}
type Builder interface {
	Build(*url.URL, url.Values) error
}
type Func func(*http.Request) bool
func (m Func) Match(r *http.Request) bool {
	return m(r)
}
func NewHeader(m map[string]string) Header {
	for k, v := range m {
		delete(m, k)
		m[http.CanonicalHeaderKey(k)] = v
	}
	return Header(m)
}
type Header map[string]string
func (m Header) Match(r *http.Request) bool {
	src := r.Header
loop:
	for k, v := range m {
		if values, ok := src[k]; !ok {
			return false
		} else if v != "" {
			for _, value := range values {
				if v == value {
					continue loop
				}
			}
			return false
		}
	}
	return true
}
func NewHost(host string) Host {
	return Host(host)
}
type Host string
func (m Host) Match(r *http.Request) bool {
	return getHost(r) == string(m)
}
func NewMethod(m []string) Method {
	for k, v := range m {
		m[k] = strings.ToUpper(v)
	}
	return Method(m)
}
type Method []string
func (m Method) Match(r *http.Request) bool {
	for _, v := range m {
		if v == r.Method {
			return true
		}
	}
	return false
}
func NewNone() *None {
	return nil
}
type None bool
func (m *None) Match(r *http.Request) bool {
	return false
}