Documentation
¶
Overview ¶
Package syntax 负责处理路由语法
Index ¶
- func MatchAny(path string) bool
- func MatchDigit(path string) bool
- func MatchWord(path string) bool
- type InterceptorFunc
- type Interceptors
- type Param
- type Params
- func (p *Params) Bool(key string) (bool, error)
- func (p *Params) Count() (cnt int)
- func (p *Params) Delete(k string)
- func (p *Params) Destroy()
- func (p *Params) Exists(key string) bool
- func (p *Params) Float(key string) (float64, error)
- func (p *Params) Get(key string) (string, bool)
- func (p *Params) Int(key string) (int64, error)
- func (p *Params) MustBool(key string, def bool) bool
- func (p *Params) MustFloat(key string, def float64) float64
- func (p *Params) MustInt(key string, def int64) int64
- func (p *Params) MustString(key, def string) string
- func (p *Params) MustUint(key string, def uint64) uint64
- func (p *Params) Range(f func(key, val string))
- func (p *Params) Set(k, v string)
- func (p *Params) String(key string) (string, error)
- func (p *Params) Uint(key string) (uint64, error)
- type Segment
- type Type
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
Types ¶
type Interceptors ¶
type Interceptors struct {
// contains filtered or unexported fields
}
func NewInterceptors ¶
func NewInterceptors() *Interceptors
func (*Interceptors) Add ¶
func (i *Interceptors) Add(f InterceptorFunc, name ...string)
func (*Interceptors) NewSegment ¶
func (i *Interceptors) NewSegment(val string) (*Segment, error)
NewSegment 声明新的 Segment 变量
如果为非字符串类型的内容,应该是以 { 符号开头才是合法的。
func (*Interceptors) Split ¶
func (i *Interceptors) Split(str string) ([]*Segment, error)
Split 将字符串解析成 Segment 数组
以 { 为分界线进行分割。比如
/posts/{id}/email ==> /posts/, {id}/email /posts/\{{id}/email ==> /posts/{, {id}/email /posts/{year}/{id}.html ==> /posts/, {year}/, {id}.html
func (*Interceptors) URL ¶
func (i *Interceptors) URL(buf *errwrap.StringBuilder, pattern string, ps map[string]string) error
URL 将 ps 中的参数填入 pattern
如果 pattern 中存在,但是不存在于 ps,将出错, 但是如果只存在于 ps,但是不存在于 pattern 是可以的。
不能将 URL 作为判断 pattern 是否合规的方法,在 ps 为空时, 将直接返回 pattern。
type Params ¶
type Params struct { Path string // 这是在 Segment.Match 中用到的路径信息。 Params []Param // 实际需要传递的参数 // contains filtered or unexported fields }
Params 路由参数
实现了 params.Params 接口
func (*Params) MustString ¶
type Segment ¶
type Segment struct { // 节点实际内容被拆分成以下几个部分,其组成方式如下: // Value = {Name:rule}Suffix // 其中 Name、rule 和 Suffix 可能为空,但是 Name 和 rule 不能同时为空。 Value string // 节点上的原始内容 Name string // 当前节点的参数名称,适用非字符节点。 Suffix string // 保存参数名之后的字符串,比如 "{id}/author" 此值为 "/author",非 endpoint 的拦截器和命名节点不能为空。。 // 节点类型 Type Type // 是否为最终结点 // // 在命名和拦截类型的路由项中,如果以 {path} 等结尾,则表示可以匹配任意剩余的字符。 // 此值表示当前节点是否为此种类型。该类型的节点在匹配时,优先级可能会比较低。 Endpoint bool // contains filtered or unexported fields }
Segment 路由项被拆分之后的分段内容
func (*Segment) AmbiguousLen ¶
func (*Segment) IsAmbiguous ¶
IsAmbiguous 判断两个节点是否存在歧义
即除了名称,其它都相同,如果两个节点符合此条件, 在相同路径下是无法判断到底要选哪一条路径的,应该避免此类节节点出现在同一路径上。
func (*Segment) Similarity ¶
Similarity 与 s1 的相似度,-1 表示完全相同, 其它大于等于零的值,越大,表示相似度越高。
type Type ¶
type Type int8
Type 路由项节点的类型
const ( // String 普通的字符串类型,逐字匹配,比如 // /users/1 // 只能匹配 /users/1,不能匹配 /users/2 String Type = iota // Interceptor 拦截器 // // 这是正则和命名参数的特例,其优先级比两都都要高。 Interceptor // Regexp 正则表达式,比如: // {id:\\d+}/abc // 可以匹配 /users/1、/users/2 等任意数值。 Regexp // Named 命名参数,相对于正则,其效率更高,当然也没有正则灵活。比如: // {id}/abc // 可以匹配 /users/1、/users/2 和 /users/username 等非数值类型 Named )
Click to show internal directories.
Click to hide internal directories.