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 Segment
- func (seg *Segment) AmbiguousLen() int16
- func (seg *Segment) IsAmbiguous(s2 *Segment) bool
- func (seg *Segment) Match(p *types.Context) bool
- func (seg *Segment) Similarity(s1 *Segment) int
- func (seg *Segment) Split(i *Interceptors, pos int) ([]*Segment, error)
- func (seg *Segment) Valid(pattern string) bool
- 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 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.