Documentation
¶
Overview ¶
Package mux 功能完备的路由中间件
语法
路由支持以 {} 的形式包含参数,比如:/posts/{id}.html,id 在解析时会解析任意字符。 也可以在 {} 中约束参数的范围,比如 /posts/{id:\\d+}.html,表示 id 只能匹配数字。 路由地址可以是 ascii 字符,但是参数名称如果是非 ascii,在正则表达式中无法使用。
Index ¶
- func ApplyMiddlewares(h http.Handler, f ...MiddlewareFunc) http.Handler
- func ApplyMiddlewaresFunc(h func(w http.ResponseWriter, r *http.Request), f ...MiddlewareFunc) http.Handler
- func IsWell(pattern string) error
- func Methods() []string
- func Params(r *http.Request) params.Params
- type MiddlewareFunc
- type Middlewares
- type Mux
- func (mux *Mux) AppendMiddleware(f MiddlewareFunc) *Mux
- func (mux *Mux) CleanMiddlewares()
- func (mux *Mux) NewRouter(name string, matcher group.Matcher) (r *Router, ok bool)
- func (mux *Mux) PrependMiddleware(f MiddlewareFunc) *Mux
- func (mux *Mux) RemoveRouter(name string)
- func (mux *Mux) Routers() []*Router
- func (mux *Mux) ServeHTTP(w http.ResponseWriter, r *http.Request)
- 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() *Prefix
- 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) error
- func (p *Prefix) HandleFunc(pattern string, f http.HandlerFunc, methods ...string) error
- func (p *Prefix) Options(pattern string, allow 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) *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) *Prefix
- func (p *Prefix) Resource(pattern string) *Resource
- func (p *Prefix) Router() *Router
- func (p *Prefix) SetAllow(pattern string, allow string) error
- func (p *Prefix) URL(pattern string, params map[string]string) (string, error)
- type Resource
- func (r *Resource) Any(h http.Handler) *Resource
- func (r *Resource) AnyFunc(f http.HandlerFunc) *Resource
- func (r *Resource) Clean() *Resource
- 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) error
- func (r *Resource) HandleFunc(f http.HandlerFunc, methods ...string) error
- func (r *Resource) Options(allow 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) *Resource
- func (r *Resource) Router() *Router
- func (r *Resource) SetAllow(allow string) error
- func (r *Resource) URL(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) AppendMiddleware(f MiddlewareFunc) *Router
- func (r *Router) Clean() *Router
- func (r *Router) CleanMiddlewares()
- 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) error
- func (r *Router) HandleFunc(pattern string, f http.HandlerFunc, methods ...string) error
- func (r *Router) Name() string
- func (r *Router) Options(pattern string, allow string) *Router
- 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) *Prefix
- func (r *Router) PrependMiddleware(f MiddlewareFunc) *Router
- 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) *Router
- func (r *Router) Resource(pattern string) *Resource
- func (r *Router) Routes(ignoreHead, ignoreOptions bool) map[string][]string
- func (r *Router) SetAllow(pattern string, allow string) error
- func (r *Router) URL(pattern string, params map[string]string) (string, error)
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func ApplyMiddlewares ¶
func ApplyMiddlewares(h http.Handler, f ...MiddlewareFunc) http.Handler
ApplyMiddlewares 按顺序将所有的中间件应用于 h
func ApplyMiddlewaresFunc ¶
func ApplyMiddlewaresFunc(h func(w http.ResponseWriter, r *http.Request), f ...MiddlewareFunc) http.Handler
ApplyMiddlewaresFunc 按顺序将所有的中间件应用于 h
Types ¶
type MiddlewareFunc ¶
MiddlewareFunc 将一个 http.Handler 封装成另一个 http.Handler
type Middlewares ¶ added in v4.2.0
Middlewares 中间件管理
func NewMiddlewares ¶ added in v4.2.0
func NewMiddlewares(next http.Handler) *Middlewares
NewMiddlewares 声明新的 Middlewares 实例
func (*Middlewares) Append ¶ added in v4.2.0
func (ms *Middlewares) Append(f MiddlewareFunc) *Middlewares
Append 添加中间件到尾部
尾部的中间件将最后被调用,多次添加,则最后一次的在最末尾。
func (*Middlewares) Prepend ¶ added in v4.2.0
func (ms *Middlewares) Prepend(m MiddlewareFunc) *Middlewares
Prepend 添加中间件到顶部
顶部的中间件在运行过程中将最早被调用,多次添加,则最后一次的在顶部。
type Mux ¶
type Mux struct {
// contains filtered or unexported fields
}
Mux 提供了强大的路由匹配功能
可以对路径按正则或是请求方法进行匹配。用法如下:
m := mux.Default() router, ok := m.NewRouter("default", group.Any) router.Get("/abc/h1", h1). Post("/abc/h2", h2). Handle("/api/{version:\\d+}",h3, http.MethodGet, http.MethodPost) // 只匹配 GET 和 POST http.ListenAndServe(m)
func New ¶
func New(disableOptions, disableHead, skipCleanPath bool, notFound, methodNotAllowed http.HandlerFunc) *Mux
New 声明一个新的 Mux
disableOptions 是否禁用自动生成 OPTIONS 功能; disableHead 是否禁用根据 Get 请求自动生成 HEAD 请求; skipCleanPath 是否不对访问路径作处理,比如 "//api" ==> "/api"; notFound 404 页面的处理方式,为 nil 时会调用默认的方式进行处理; methodNotAllowed 405 页面的处理方式,为 nil 时会调用默认的方式进行处理;
func (*Mux) AppendMiddleware ¶ added in v4.2.0
func (mux *Mux) AppendMiddleware(f MiddlewareFunc) *Mux
AppendMiddleware 添加中间件到尾部
func (*Mux) CleanMiddlewares ¶ added in v4.2.0
func (mux *Mux) CleanMiddlewares()
func (*Mux) NewRouter ¶
NewRouter 添加子路由
该路由只有符合 group.Matcher 的要求才会进入,其它与 Router 功能相同。 当 group.Matcher 与其它路由组的判断有重复时,第一条返回 true 的路由组获胜, 即使该路由组最终返回 404,也不会再在其它路由组里查找相应的路由。 所以在有多条子路由的情况下,第一条子路由不应该永远返回 true, 这样会造成其它子路由永远无法到达。
name 表示该路由组的名称,需要唯一,否则返回 false; matcher 路由的准入条件,如果为空,则此条路由匹配时会被排在最后, 只有一个路由的 matcher 为空,否则会 panic。
func (*Mux) PrependMiddleware ¶ added in v4.2.0
func (mux *Mux) PrependMiddleware(f MiddlewareFunc) *Mux
PrependMiddleware 添加中间件到顶部
type Prefix ¶
type Prefix struct {
// contains filtered or unexported fields
}
Prefix 可以将具有统一前缀的路由项集中在一起操作
example:
p := srv.Prefix("/api") p.Get("/users") // 相当于 srv.Get("/api/users") p.Get("/user/1") // 相当于 srv.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 ¶
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 ¶
Prefix 在现有 Prefix 的基础上声明一个新的 Prefix 实例
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 Resource ¶
type Resource struct {
// contains filtered or unexported fields
}
Resource 以资源地址为对象的路由配置
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) error
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 提供了基本的路由项添加和删除等功能
func (*Router) AnyFunc ¶
func (r *Router) AnyFunc(pattern string, f http.HandlerFunc) *Router
AnyFunc 相当于 Router.HandleFunc(pattern, func) 的简易写法
func (*Router) AppendMiddleware ¶ added in v4.2.0
func (r *Router) AppendMiddleware(f MiddlewareFunc) *Router
AppendMiddleware 添加中间件到尾部
func (*Router) CleanMiddlewares ¶ added in v4.2.0
func (r *Router) CleanMiddlewares()
func (*Router) DeleteFunc ¶
func (r *Router) DeleteFunc(pattern string, f http.HandlerFunc) *Router
DeleteFunc 相当于 Router.HandleFunc(pattern, func, http.MethodDelete) 的简易写法
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,可以通过 IsWell 检测语法的有效性,其它接口也相同; methods 该路由项对应的请求方法,如果未指定值,则表示所有支持的请求方法, 但不包含 OPTIONS 和 HEAD。
func (*Router) HandleFunc ¶
HandleFunc 功能同 Router.Handle(),但是将第二个参数从 http.Handler 换成了 http.HandlerFunc
func (*Router) Options ¶
Options 将 OPTIONS 请求方法的报头 allow 值固定为指定的值
若无特殊需求,不用调用此方法,系统会自动计算符合当前路由的请求方法列表。 如果想实现对处理方法的自定义,可以显示地调用 Handle 方法:
Router.Handle("/api/1", handle, http.MethodOptions)
Options 与 SetAllow 功能上完全相同,只是对错误处理上有所有区别。 Options 在出错时 panic,而 SetAllow 会返回错误信息。
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) PrependMiddleware ¶ added in v4.2.0
func (r *Router) PrependMiddleware(f MiddlewareFunc) *Router
PrependMiddleware 添加中间件到顶部
func (*Router) PutFunc ¶
func (r *Router) PutFunc(pattern string, f http.HandlerFunc) *Router
PutFunc 相当于 Router.HandleFunc(pattern, func, http.MethodPut) 的简易写法
func (*Router) Routes ¶
Routes 返回当前路由组的路由项
ignoreHead 是否忽略自动生成的 HEAD 请求; ignoreOptions 是否忽略自动生成的 OPTIONS 请求;
Directories
¶
Path | Synopsis |
---|---|
Package group 提供了按条件进行分组路由的功能
|
Package group 提供了按条件进行分组路由的功能 |
Package interceptor 针对带参数类型路由的拦截处理 在解析诸如 /authors/{id:\\d+} 带参数的路由项时, 用户可以通过拦截并自定义对参数部分 {id:\\d+} 的解析, 从而不需要走正则表达式的那一套解析流程,可以在一定程度上增强性能。
|
Package interceptor 针对带参数类型路由的拦截处理 在解析诸如 /authors/{id:\\d+} 带参数的路由项时, 用户可以通过拦截并自定义对参数部分 {id:\\d+} 的解析, 从而不需要走正则表达式的那一套解析流程,可以在一定程度上增强性能。 |
internal
|
|
handlers
Package handlers 用于处理节点下与处理函数相关的逻辑
|
Package handlers 用于处理节点下与处理函数相关的逻辑 |
syntax
Package syntax 负责处理路由语法
|
Package syntax 负责处理路由语法 |
tree
Package tree 提供了以树形结构保存路由项的相关操作。
|
Package tree 提供了以树形结构保存路由项的相关操作。 |
Package params 获取和转换路由中的参数信息
|
Package params 获取和转换路由中的参数信息 |