3.06 路由树-静态匹配之集成Server
(base) yanglei@yuanhong 11-embeddingRouterIntoServer % tree ./
./
├── context.go
├── handleFunc.go
├── httpServer.go
├── httpServer_test.go
├── node.go
├── router.go
├── router_test.go
└── serverInterface.go
0 directories, 8 filesPART1. 实现HTTPServer.serve()方法
HTTPServer.serve()方法// serve 查找路由树并执行命中的业务逻辑
func (s *HTTPServer) serve(ctx *Context) {
method := ctx.Req.Method
path := ctx.Req.URL.Path
targetNode, ok := s.findRoute(method, path)
// 没有在路由树中找到对应的路由节点 或 找到了路由节点的处理函数为空(即NPE:none pointer exception 的问题)
// 则返回404
if !ok || targetNode.HandleFunc == nil {
ctx.Resp.WriteHeader(http.StatusNotFound)
// 此处确实会报错 但是作为一个WEB框架 遇上了这种错误也没有特别好的处理办法
// 最多只能是落个日志
_, _ = ctx.Resp.Write([]byte("Not Found"))
return
}
// 执行路由节点的处理函数
targetNode.HandleFunc(*ctx)
}PART2. 修改HandleFunc类型的入参
HandleFunc类型的入参2.1 修改入参类型为*Context
*Context2.2 修改其他受影响的地方
PART3. 测试

PART4. 修改HTTPServer的成员属性
HTTPServer的成员属性附录
需要课后尝试的内容
何时将成员属性类型定义为指针类型?何时将成员属性类型定义为结构体类型?
case1. 使用者用&HTTPServer的情况
&HTTPServer的情况case2. 使用者用HTTPServer的情况
HTTPServer的情况Last updated