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 files

PART1. 修改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