Documentation
¶
Overview ¶
Package mux 功能完备的路由中间件
Index ¶
- func AllowedCORS(o *options.Options)
- func ApplyMiddlewares(h http.Handler, f ...MiddlewareFunc) http.Handler
- func ApplyMiddlewaresFunc(h func(w http.ResponseWriter, r *http.Request), f ...MiddlewareFunc) http.Handler
- func CaseInsensitive(o *options.Options)
- func CheckSyntax(pattern string) error
- func FileServer(fsys http.FileSystem, name, index string, ...) http.Handler
- func InterceptorAny(rule string) bool
- func InterceptorDigit(rule string) bool
- func InterceptorWord(rule string) bool
- func Lock(o *options.Options)
- func Methods() []string
- func Trace(body bool, log *log.Logger) http.Handler
- func URL(pattern string, params map[string]string) (string, error)
- type InterceptorFunc
- type MiddlewareFunc
- type Middlewares
- type Option
- func CORS(origins, allowHeaders, exposedHeaders []string, maxAge int, ...) Option
- func HTTPRecovery(status int) Option
- func Interceptor(f InterceptorFunc, name ...string) Option
- func LogRecovery(status int, l *log.Logger) Option
- func MethodNotAllowed(h http.Handler) Option
- func NotFound(h http.Handler) Option
- func Recovery(f RecoverFunc) Option
- func URLDomain(domain string) Option
- func WriterRecovery(status int, out io.Writer) Option
- type Params
- type Prefix
- func (p *Prefix) Any(pattern string, h http.Handler) *Prefix
- func (p *Prefix) AnyFunc(pattern string, f http.HandlerFunc) *Prefix
- func (p *Prefix) Clean()
- func (p *Prefix) Delete(pattern string, h http.Handler) *Prefix
- func (p *Prefix) DeleteFunc(pattern string, f http.HandlerFunc) *Prefix
- func (p *Prefix) Get(pattern string, h http.Handler) *Prefix
- func (p *Prefix) GetFunc(pattern string, f http.HandlerFunc) *Prefix
- func (p *Prefix) Handle(pattern string, h http.Handler, methods ...string) *Prefix
- func (p *Prefix) HandleFunc(pattern string, f http.HandlerFunc, methods ...string) *Prefix
- func (p *Prefix) Patch(pattern string, h http.Handler) *Prefix
- func (p *Prefix) PatchFunc(pattern string, f http.HandlerFunc) *Prefix
- func (p *Prefix) Post(pattern string, h http.Handler) *Prefix
- func (p *Prefix) PostFunc(pattern string, f http.HandlerFunc) *Prefix
- func (p *Prefix) Prefix(prefix string, m ...middleware.Func) *Prefix
- func (p *Prefix) Put(pattern string, h http.Handler) *Prefix
- func (p *Prefix) PutFunc(pattern string, f http.HandlerFunc) *Prefix
- func (p *Prefix) Remove(pattern string, methods ...string)
- func (p *Prefix) Resource(pattern string, m ...middleware.Func) *Resource
- func (p *Prefix) Router() *Router
- func (p *Prefix) URL(strict bool, pattern string, params map[string]string) (string, error)
- type RecoverFunc
- type Resource
- func (r *Resource) Any(h http.Handler) *Resource
- func (r *Resource) AnyFunc(f http.HandlerFunc) *Resource
- func (r *Resource) Clean()
- func (r *Resource) Delete(h http.Handler) *Resource
- func (r *Resource) DeleteFunc(f http.HandlerFunc) *Resource
- func (r *Resource) Get(h http.Handler) *Resource
- func (r *Resource) GetFunc(f http.HandlerFunc) *Resource
- func (r *Resource) Handle(h http.Handler, methods ...string) *Resource
- func (r *Resource) HandleFunc(f http.HandlerFunc, methods ...string) *Resource
- func (r *Resource) Patch(h http.Handler) *Resource
- func (r *Resource) PatchFunc(f http.HandlerFunc) *Resource
- func (r *Resource) Post(h http.Handler) *Resource
- func (r *Resource) PostFunc(f http.HandlerFunc) *Resource
- func (r *Resource) Put(h http.Handler) *Resource
- func (r *Resource) PutFunc(f http.HandlerFunc) *Resource
- func (r *Resource) Remove(methods ...string)
- func (r *Resource) Router() *Router
- func (r *Resource) URL(strict bool, params map[string]string) (string, error)
- type Router
- func (r *Router) Any(pattern string, h http.Handler) *Router
- func (r *Router) AnyFunc(pattern string, f http.HandlerFunc) *Router
- func (r *Router) Clean()
- func (r *Router) Delete(pattern string, h http.Handler) *Router
- func (r *Router) DeleteFunc(pattern string, f http.HandlerFunc) *Router
- func (r *Router) Get(pattern string, h http.Handler) *Router
- func (r *Router) GetFunc(pattern string, f http.HandlerFunc) *Router
- func (r *Router) Handle(pattern string, h http.Handler, methods ...string) *Router
- func (r *Router) HandleFunc(pattern string, f http.HandlerFunc, methods ...string) *Router
- func (r *Router) Middlewares() *Middlewares
- func (r *Router) Name() string
- func (r *Router) Patch(pattern string, h http.Handler) *Router
- func (r *Router) PatchFunc(pattern string, f http.HandlerFunc) *Router
- func (r *Router) Post(pattern string, h http.Handler) *Router
- func (r *Router) PostFunc(pattern string, f http.HandlerFunc) *Router
- func (r *Router) Prefix(prefix string, m ...middleware.Func) *Prefix
- func (r *Router) Put(pattern string, h http.Handler) *Router
- func (r *Router) PutFunc(pattern string, f http.HandlerFunc) *Router
- func (r *Router) Remove(pattern string, methods ...string)
- func (r *Router) Resource(pattern string, m ...middleware.Func) *Resource
- func (r *Router) Routes() map[string][]string
- func (r *Router) ServeHTTP(w http.ResponseWriter, req *http.Request)
- func (r *Router) URL(strict bool, pattern string, params map[string]string) (url string, err error)
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func ApplyMiddlewares ¶
func ApplyMiddlewares(h http.Handler, f ...MiddlewareFunc) http.Handler
func ApplyMiddlewaresFunc ¶
func ApplyMiddlewaresFunc(h func(w http.ResponseWriter, r *http.Request), f ...MiddlewareFunc) http.Handler
func CheckSyntax ¶
CheckSyntax 检测路由项的语法格式
路由中可通过 {} 指定参数名称,如果参数名中带 :,则 : 之后的为参数的约束条件, 比如 /posts/{id}.html 表示匹配任意任意字符的参数 id。/posts/{id:\d+}.html, 表示匹配正则表达式 \d+ 的参数 id。
func FileServer ¶ added in v5.2.0
func FileServer(fsys http.FileSystem, name, index string, errHandler func(http.ResponseWriter, int, interface{})) http.Handler
FileServer 声明静态文件服务
fsys 访问的文件系统; name 路径保存在 context 中的参数名; index 当用户访问的是目录时,将自动读取此目录下的 index 文件,如果为空则为 index.html; errHandler 对各类出错的处理,如果为空会调用 http.Error 进行相应的处理。 如果要自定义,目前 status 可能的值有 403、404 和 500, 其中的 500 用于处理各类出错的情况,错误信息通过 msg 传递; 函数原型为:
func(w http.ResponseWriter, status int, msg interface{})
status 表示输出的状态码,msg 表示额外的信息,一般为空或是 error 类型的数据。 返回对象同时实现了 http.FileSystem 接口;
r := NewRouter("") r.Get("/assets/{path}", FileServer(http.Dir("./assets"), "path", "index.html", nil)
Types ¶
type MiddlewareFunc ¶
type MiddlewareFunc = middleware.Func
type Middlewares ¶
type Middlewares = middleware.Middlewares
func NewMiddlewares ¶
func NewMiddlewares(next http.Handler) *Middlewares
NewMiddlewares 声明新的 Middlewares 实例
type Option ¶
Option 自定义路由参数的函数原型
func CORS ¶
CORS 自定义跨域请求设置项
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/cors
origins 对应 Origin 报头。如果包含了 *,那么其它的设置将不再启作用。 如果此值为空,表示不启用跨域的相关设置;
allowHeaders 对应 Access-Control-Allow-Headers 可以包含 *,表示可以是任意值,其它值将不再启作用;
exposedHeaders 对应 Access-Control-Expose-Headers
maxAge 对应 Access-Control-Max-Age 有以下几种取值: 0 不输出该报头; -1 表示禁用; 其它 >= -1 的值正常输出数值;
allowCredentials 对应 Access-Control-Allow-Credentials。
NOTE: AllowedCORS 与 CORS 会相互覆盖。
func HTTPRecovery ¶ added in v5.3.0
HTTPRecovery 仅向客户端输出 status 状态码
func Interceptor ¶
func Interceptor(f InterceptorFunc, name ...string) Option
Interceptor 针对带参数类型路由的拦截处理
在解析诸如 /authors/{id:\\d+} 带参数的路由项时, 用户可以通过拦截并自定义对参数部分 {id:\\d+} 的解析, 从而不需要走正则表达式的那一套解析流程,可以在一定程度上增强性能。
一旦正则表达式被拦截,则节点类型也将不再是正则表达式, 其处理优先级会比正则表达式类型高。 在某些情况下,可能会造成处理结果不相同。比如:
/authors/{id:\\d+} // 1 /authors/{id:[0-9]+} // 2
以上两条记录是相同的,但因为表达式不同,也能正常添加, 处理流程,会按添加顺序优先比对第一条,所以第二条是永远无法匹配的。 但是如果你此时添加了 Interceptor(InterceptorDigit, "[0-9]+"), 使第二个记录的优先级提升,会使第一条永远无法匹配到数据。
func MethodNotAllowed ¶
MethodNotAllowed 自定义 405 状态码下的输出
在 405 状态码下,除了输出用户指定的输出内容之外,系统还会输出 Allow 报头。
func Recovery ¶ added in v5.3.0
func Recovery(f RecoverFunc) Option
Recovery 用于指路由 panic 之后的处理方法
除了采用 Option 的方式之外,也可以使用中间件的方式处理 panic, 但是中间件的处理方式需要用户保证其在中间件的最外层, 否则可能会发生其外层的中间件发生 panic 无法捕获的问题。 而 Option 方式没有此问题。
type Prefix ¶
type Prefix struct {
// contains filtered or unexported fields
}
Prefix 操纵统一前缀的路由
example: r := NewRouter("")
p := r.Prefix("/api") p.Get("/users") // 相当于 r.Get("/api/users") p.Get("/user/1") // 相当于 r.Get("/api/user/1")
func (*Prefix) AnyFunc ¶
func (p *Prefix) AnyFunc(pattern string, f http.HandlerFunc) *Prefix
AnyFunc 相当于 Router.AnyFunc(prefix+pattern, func) 的简易写法
func (*Prefix) Clean ¶
func (p *Prefix) Clean()
Clean 清除所有以 Prefix.prefix 开头的路由项
当指定多个相同的 Prefix 时,调用其中的一个 Clean 也将会清除其它的:
p1 := mux.Prefix("prefix") p2 := mux.Prefix("prefix") p2.Clean() 将同时清除 p1 的内容,因为有相同的前缀。
func (*Prefix) DeleteFunc ¶
func (p *Prefix) DeleteFunc(pattern string, f http.HandlerFunc) *Prefix
DeleteFunc 相当于 Router.DeleteFunc(prefix+pattern, func) 的简易写法
func (*Prefix) GetFunc ¶
func (p *Prefix) GetFunc(pattern string, f http.HandlerFunc) *Prefix
GetFunc 相当于 Router.GetFunc(prefix+pattern, func) 的简易写法
func (*Prefix) HandleFunc ¶
HandleFunc 功能同 Router.HandleFunc(prefix+pattern, fun, ...)
func (*Prefix) PatchFunc ¶
func (p *Prefix) PatchFunc(pattern string, f http.HandlerFunc) *Prefix
PatchFunc 相当于 Router.PatchFunc(prefix+pattern, func) 的简易写法
func (*Prefix) PostFunc ¶
func (p *Prefix) PostFunc(pattern string, f http.HandlerFunc) *Prefix
PostFunc 相当 于Mux.PostFunc(prefix+pattern, func) 的简易写法
func (*Prefix) Prefix ¶
func (p *Prefix) Prefix(prefix string, m ...middleware.Func) *Prefix
Prefix 在现有 Prefix 的基础上声明一个新的 Prefix 实例
m 中间件函数,按顺序调用,会继承 p 的中间件并按在 m 之前;
example:
p := mux.Prefix("/api") v := p.Prefix("/v2") v.Get("/users") // 相当于 g.Get("/api/v2/users") v.Get("/users/1") // 相当于 g.Get("/api/v2/users/1") v.Get("example.com/users/1") // 相当于 g.Get("/api/v2/example.com/users/1")
func (*Prefix) PutFunc ¶
func (p *Prefix) PutFunc(pattern string, f http.HandlerFunc) *Prefix
PutFunc 相当于 Router.PutFunc(prefix+pattern, func) 的简易写法
type RecoverFunc ¶ added in v5.3.0
type RecoverFunc = options.RecoverFunc
RecoverFunc 路由对 panic 的处理函数原型
type Resource ¶
type Resource struct {
// contains filtered or unexported fields
}
Resource 以资源地址为对象的路由
srv := NewRouter("") r, _ := srv.Resource("/api/users/{id}") r.Get(h) // 相当于 srv.Get("/api/users/{id}") r.Post(h) // 相当于 srv.Post("/api/users/{id}") url := r.URL(map[string]string{"id":5}) // 获得 /api/users/5
func (*Resource) AnyFunc ¶
func (r *Resource) AnyFunc(f http.HandlerFunc) *Resource
AnyFunc 相当于 Router.AnyFunc(pattern, func) 的简易写法
func (*Resource) DeleteFunc ¶
func (r *Resource) DeleteFunc(f http.HandlerFunc) *Resource
DeleteFunc 相当于 Router.DeleteFunc(pattern, func) 的简易写法
func (*Resource) GetFunc ¶
func (r *Resource) GetFunc(f http.HandlerFunc) *Resource
GetFunc 相当于 Router.GetFunc(pattern, func) 的简易写法
func (*Resource) HandleFunc ¶
func (r *Resource) HandleFunc(f http.HandlerFunc, methods ...string) *Resource
HandleFunc 功能同 Router.HandleFunc(pattern, fun, ...)
func (*Resource) PatchFunc ¶
func (r *Resource) PatchFunc(f http.HandlerFunc) *Resource
PatchFunc 相当于 Router.PatchFunc(pattern, func) 的简易写法
func (*Resource) PostFunc ¶
func (r *Resource) PostFunc(f http.HandlerFunc) *Resource
PostFunc 相当于 Router.PostFunc(pattern, func) 的简易写法
func (*Resource) PutFunc ¶
func (r *Resource) PutFunc(f http.HandlerFunc) *Resource
PutFunc 相当于 Router.PutFunc(pattern, func) 的简易写法
func (*Resource) URL ¶
URL 根据参数构建一条 URL
params 匹配路由参数中的同名参数,或是不存在路由参数,比如普通的字符串路由项, 该参数不启作用;
res, := m.Resource("/posts/{id}") res.URL(map[string]string{"id": "1"}, "") // /posts/1 res, := m.Resource("/posts/{id}/{path}") res.URL(map[string]string{"id": "1","path":"author/profile"}) // /posts/1/author/profile
type Router ¶
type Router struct {
// contains filtered or unexported fields
}
Router 路由
可以对路径按正则或是请求方法进行匹配。用法如下:
router := NewRouter("") router.Get("/abc/h1", h1). Post("/abc/h2", h2). Handle("/api/{version:\\d+}",h3, http.MethodGet, http.MethodPost) // 只匹配 GET 和 POST http.ListenAndServe(router)
如果需要同时对多个 Router 实例进行路由,可以采用 group.Group 对象管理多个 Router 实例。
func NewRouter ¶
NewRouter 声明路由
name string 路由名称,可以为空;
o 修改路由的默认形为。比如 CaseInsensitive 会让路由忽略大小写, 相同类型的函数会相互覆盖,比如 CORS 和 AllowedCORS,后传递会覆盖前传递的值。
func (*Router) AnyFunc ¶
func (r *Router) AnyFunc(pattern string, f http.HandlerFunc) *Router
AnyFunc 相当于 Router.HandleFunc(pattern, func) 的简易写法
func (*Router) DeleteFunc ¶
func (r *Router) DeleteFunc(pattern string, f http.HandlerFunc) *Router
DeleteFunc 相当于 Router.HandleFunc(pattern, func, http.MethodDelete) 的简易写法
func (*Router) Get ¶
Get 相当于 Router.Handle(pattern, h, http.MethodGet) 的简易写法
h 不应该主动调用 WriteHeader,否则会导致 HEAD 请求获取不到 Content-Length 报头。
func (*Router) GetFunc ¶
func (r *Router) GetFunc(pattern string, f http.HandlerFunc) *Router
GetFunc 相当于 Router.HandleFunc(pattern, func, http.MethodGet) 的简易写法
func (*Router) Handle ¶
Handle 添加一条路由数据
pattern 为路由匹配模式,可以是正则匹配也可以是字符串匹配, 若语法不正确,则直接 panic,可以通过 CheckSyntax 检测语法的有效性,其它接口也相同。 methods 该路由项对应的请求方法,如果未指定值,则表示所有支持的请求方法, 但不包含 OPTIONS 和 HEAD。
func (*Router) HandleFunc ¶
HandleFunc 功能同 Router.Handle(),但是将第二个参数从 http.Handler 换成了 http.HandlerFunc
func (*Router) PatchFunc ¶
func (r *Router) PatchFunc(pattern string, f http.HandlerFunc) *Router
PatchFunc 相当于 Router.HandleFunc(pattern, func, http.MethodPatch) 的简易写法
func (*Router) PostFunc ¶
func (r *Router) PostFunc(pattern string, f http.HandlerFunc) *Router
PostFunc 相当于 Router.HandleFunc(pattern, func, "POST") 的简易写法
func (*Router) Prefix ¶
func (r *Router) Prefix(prefix string, m ...middleware.Func) *Prefix
Prefix 声明一个 Prefix 实例
prefix 路由前缀字符串,可以为空; m 中间件函数,按顺序调用;
func (*Router) PutFunc ¶
func (r *Router) PutFunc(pattern string, f http.HandlerFunc) *Router
PutFunc 相当于 Router.HandleFunc(pattern, func, http.MethodPut) 的简易写法
func (*Router) Resource ¶
func (r *Router) Resource(pattern string, m ...middleware.Func) *Resource
Resource 创建一个资源路由项
pattern 资源地址; m 中间件函数,按顺序调用;
Source Files
¶
Directories
¶
Path | Synopsis |
---|---|
Package group 提供了按条件进行分组路由的功能
|
Package group 提供了按条件进行分组路由的功能 |
internal
|
|
options
Package options 提供了初始化路由的参数对象
|
Package options 提供了初始化路由的参数对象 |
syntax
Package syntax 负责处理路由语法
|
Package syntax 负责处理路由语法 |
tree
Package tree 提供了以树形结构保存路由项的相关操作
|
Package tree 提供了以树形结构保存路由项的相关操作 |
Package middleware 中间件管理
|
Package middleware 中间件管理 |
Package params 路由参数的相关声明
|
Package params 路由参数的相关声明 |