学习Go语言Web框架Gee总结--分组控制Group(四)

本文介绍了Go语言Web框架Gee中的路由分组功能,如何通过Group方法创建和管理路由规则,以及Engine结构在路由处理中的作用。
摘要由CSDN通过智能技术生成

学习Go语言Web框架Gee总结--分组控制Group

学习网站来源:Gee

相当于上一篇,这节只改变了gee/gee.go文件,其他文件一样

路由分组是指将相似的路由规则分组到一起,以便更好地管理和维护路由
就比如在网络中,路由分组可以根据不同的需求进行分类,比如按照目的地、协议类型、服务类型等进行分组。

group/gee/gee.go

package gee

import (
	"log"
	"net/http"
)

// HandlerFunc defines the request handler used by gee
type HandlerFunc func(*Context)

type (
	//包含了前缀prefix、中间件middlewares、父分组parent以及引擎实例engine
	RouterGroup struct {
		prefix      string
		middlewares []HandlerFunc // 支持中间件
		parent      *RouterGroup  // 支持嵌套
		engine      *Engine       // 所有组共享一个Engine实例
	}

	//实现了ServeHTTP接口,同时包含了RouterGroup和router以及存储所有分组的groups
	Engine struct {
		*RouterGroup
		router *router
		groups []*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.engine
	newGroup := &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 + comp
	log.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)
}

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

佳辰辰辰辰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值