3.08 路由树-通配符匹配之路由查找与测试
本节课工程结构如下:
(base) yanglei@yuanhong 13-findWildcard % tree ./
./
├── context.go
├── handleFunc.go
├── httpServer.go
├── httpServer_test.go
├── node.go
├── router.go
├── router_test.go
└── serverInterface.go
0 directories, 8 filesPART1. 修改childOf()方法
childOf()方法之前的childOf()方法是仅在当前节点的子节点映射中查找子节点,但很明显现在需要再查找当前节点的通配符子节点.
node.go:
// childOf 根据给定的path在当前节点的子节点映射中查找对应的子节点(即匹配到了静态路由)
// 若未在子节点映射中找到对应子节点 则尝试返回当前节点的通配符子节点
func (n *node) childOf(path string) (child *node, found bool) {
// 当前节点的子节点映射为空 则有可能匹配到通配符节点
if n.children == nil {
return n.wildcardChild, n.wildcardChild != nil
}
// 在子当前节点的节点映射中查找对应的子节点 若未找到同样尝试返回当前节点的通配符子节点
child, found = n.children[path]
if !found {
return n.wildcardChild, n.wildcardChild != nil
}
// 找到了对应的子节点 则返回该子节点
return child, found
}PART2. 编写测试用例
这里还是在router_test.go新建一个单独测试查找通配符路由的函数.
2.1 测试普通节点的通配符子节点
router_test.go:
测试顺利通过
2.2 测试普通节点下普通子节点和通配符子节点共存
router_test.go:
测试顺利通过
PART3. 测试Server的通配符匹配
httpServer_test.go:
Last updated