🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
#### 3.2 IRouter 路由配置抽象类 现在我们来给Zinx实现一个非常简单基础的路由功能,目的当然就是为了快速的让Zinx步入到路由的阶段。后续我们会不断的完善路由功能。 ##### A\) 创建抽象的IRouter层 在`ziface`下创建`irouter.go`文件 zinx/ziface/irouter.go ```go package ziface /* 路由接口, 这里面路由是 使用框架者给该链接自定的 处理业务方法 路由里的IRequest 则包含用该链接的链接信息和该链接的请求数据信息 */ type IRouter interface{ PreHandle(request IRequest) //在处理conn业务之前的钩子方法 Handle(request IRequest) //处理conn业务的方法 PostHandle(request IRequest) //处理conn业务之后的钩子方法 } ``` 我们知道router实际上的作用就是,服务端应用可以给Zinx框架配置当前链接的处理业务方法,之前的Zinx-V0.2我们的Zinx框架处理链接请求的方法是固定的,现在是可以自定义,并且有3种接口可以重写。 `Handle`:是处理当前链接的主业务函数 `PreHandle`:如果需要在主业务函数之前有前置业务,可以重写这个方法 `PostHandle`:如果需要在主业务函数之后又后置业务,可以重写这个方法 当然每个方法都有一个唯一的形参`IRequest`对象,也就是客户端请求过来的连接和请求数据,作为我们业务方法的输入数据。 ##### B\) 实现Router类 在`znet`下创建`router.go`文件 ```go package znet import "zinx/ziface" //实现router时,先嵌入这个基类,然后根据需要对这个基类的方法进行重写 type BaseRouter struct {} //这里之所以BaseRouter的方法都为空, // 是因为有的Router不希望有PreHandle或PostHandle // 所以Router全部继承BaseRouter的好处是,不需要实现PreHandle和PostHandle也可以实例化 func (br *BaseRouter)PreHandle(req ziface.IRequest){} func (br *BaseRouter)Handle(req ziface.IRequest){} func (br *BaseRouter)PostHandle(req ziface.IRequest){} ``` 我们当前的Zinx目录结构应该如下: ```bash . ├── README.md ├── ziface │   ├── iconnnection.go │   ├── irequest.go │   ├── irouter.go │   └── iserver.go └── znet ├── connection.go ├── request.go ├── router.go ├── server.go └── server_test.go ```