学习Go语言Web框架Gee总结–分组控制Group
学习网站来源:Gee
相当于上一篇,这节只改变了gee/gee.go文件,其他文件一样
路由分组是指将相似的路由规则分组到一起,以便更好地管理和维护路由
就比如在网络中,路由分组可以根据不同的需求进行分类,比如按照目的地、协议类型、服务类型等进行分组。
group/gee/gee.go
package geeimport ("log""net/http")// HandlerFunc defines the request handler used by geetype HandlerFunc func(*Context)type (//包含了前缀prefix、中间件middlewares、父分组parent以及引擎实例engineRouterGroup struct {prefixstringmiddlewares []HandlerFunc // 支持中间件parent*RouterGroup// 支持嵌套engine*Engine // 所有组共享一个Engine实例}//实现了ServeHTTP接口,同时包含了RouterGroup和router以及存储所有分组的groupsEngine struct {*RouterGrouprouter *routergroups []*RouterGroup // 存储所有组)func New() *Engine {engine := &Engine{router: newRouter()}engine.RouterGroup = &RouterGroup{engine: engine}engine.groups = []*RouterGroup{engine.RouterGroup}return engine}/*用于创建新的路由分组在这个方法中,根据传入的前缀创建一个新的RouterGroup实例,并将其添加到Engine的groups中*/func (group *RouterGroup) Group(prefix string) *RouterGroup {engine := group.enginenewGroup := &RouterGroup{prefix: group.prefix + prefix,parent: group,engine: engine,}engine.groups = append(engine.groups, newGroup)return newGroup}/*用于向路由表中添加路由规则在这个方法中,根据传入的HTTP方法、路由模式和处理函数,构建完整的路由模式,并将其添加到路由表中*/func (group *RouterGroup) addRoute(method string, comp string, handler HandlerFunc) {pattern := group.prefix + complog.Printf("Route %4s - %s", method, pattern)group.engine.router.addRoute(method, pattern, handler)}func (group *RouterGroup) GET(pattern string, handler HandlerFunc) {group.addRoute("GET", pattern, handler)}func (group *RouterGroup) POST(pattern string, handler HandlerFunc) {group.addRoute("POST", pattern, handler)}func (engine *Engine) Run(addr string) (err error) {return http.ListenAndServe(addr, engine)}//实现了http.Handler接口,用于处理HTTP请求,它会创建一个新的上下文对象,并调用路由表的处理方法来处理请求func (engine *Engine) ServeHTTP(w http.ResponseWriter, req *http.Request) {c := newContext(w, req)engine.router.handle(c)}