// Package matcher 提供 nginx 风格的 location 匹配引擎实现。 // // 该包实现了多种 location 匹配策略,包括: // - 精确匹配(exact):完全匹配请求路径 // - 前缀匹配(prefix):基于 Radix Tree 的最长前缀匹配 // - 前缀优先匹配(prefix_priority):^~ 类型,跳过正则匹配 // - 正则匹配(regex/regex_caseless):支持命名捕获组 // - 命名匹配(named):@name 形式的内部跳转目标 // // 主要用途: // // 用于反向代理模块根据请求路径选择对应的后端处理器, // 优先级顺序与 nginx 一致:精确 > 前缀优先(^~) > 正则(~,~*) > 普通前缀 // // 注意事项: // - Radix Tree 在初始化完成后不可修改(MarkInitialized 后 Insert 返回错误) // - 正则匹配器按注册顺序执行,先匹配到的优先 // - 所有匹配器均为非并发安全,应在启动阶段完成配置 // // 作者:xfy package matcher import "github.com/valyala/fasthttp" // LocationType 常量定义,表示不同 location 匹配类型。 const ( // LocationTypeExact 精确匹配类型(=)。 LocationTypeExact = "exact" // LocationTypePrefix 前缀匹配类型。 LocationTypePrefix = "prefix" // LocationTypePrefixPriority 前缀优先匹配类型(^~)。 LocationTypePrefixPriority = "prefix_priority" // LocationTypeRegex 正则匹配类型(~)。 LocationTypeRegex = "regex" // LocationTypeRegexCaseless 大小写不敏感正则匹配类型(~*)。 LocationTypeRegexCaseless = "regex_caseless" // LocationTypeNamed 命名匹配类型(@name)。 LocationTypeNamed = "named" ) // MatchResult 匹配结果。 // // 包含匹配成功后的处理器、捕获组和位置类型信息。 type MatchResult struct { // Captures 正则表达式的命名捕获组 Captures map[string]string // Handler 匹配到的请求处理器 Handler fasthttp.RequestHandler // Internal 是否为 internal location Internal bool // LocationType 匹配类型(exact/prefix/regex 等) LocationType string // Path 匹配的路径模式 Path string // Priority 匹配优先级(数值越小优先级越高) Priority int } // Matcher 匹配器接口。 // // 所有具体匹配器(ExactMatcher、RegexMatcher 等)均需实现此接口。 type Matcher interface { // Match 检查给定路径是否匹配 Match(path string) bool // Result 返回匹配结果(包含 Handler 和元数据) Result() *MatchResult }