現(xiàn)在的版本確實改了痛悯,看的是之前的版本鸵赫,1.9 還是 1.8 忘了。
// 通過給定的 path 從 handler hash 結構中查找 handler
// 最長模式優(yōu)先
func (mux *ServeMux) match(path string) (h Handler, pattern string) {
var n = 0
// 遍歷
for k, v := range mux.m {
if !pathMatch(k, path) {
continue
}
// len(k) > n 即還能找到更長的 pattern施绎,滿足最長模式優(yōu)先
if h == nil || len(k) > n {
n = len(k)
// 返回 handler
h = v.h
pattern = v.pattern
}
}
return
}
// 匹配
func pathMatch(pattern, path string) bool {
if len(pattern) == 0 {
// should not happen
return false
}
n := len(pattern)
if pattern[n-1] != '/' {
return pattern == path
}
// 是否匹配,mux 的 key(pattern)和給定的 path比較贞绳,按照最長原則
return len(path) >= n && path[0:n] == pattern
}
golang echo 框架路由分析幾個問題 在分析之前谷醉,帶著問題去查找答案。 官方 http 包已經提供了server的功能冈闭,為什么要用框架俱尼? 路由注冊 簡單的程序 我們來看看 echo 的三種匹配模式和優(yōu)先...