现在的版本确实改了,看的是之前的版本,1.9 还是 1.8 忘了。
// 通过给定的 path 从 handler hash 结构中查找 handler
// 最长模式优先
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,满足最长模式优先
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 的三种匹配模式和优先...