Skip to content
/ Gee Public

参考极客兔兔的《7天用Go从零实现Web框架Gee教程》

Notifications You must be signed in to change notification settings

liansyyy/Gee

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

day3 前缀树路由Router

内容:

  • 使用前缀树实现动态路由匹配(dynamic route)
  • 实现两种匹配模式:name*filepath

步骤:

  • Trie树,主要是两个功能:插入insert、查找search,这两个功能完成后,前缀树可以作为一个模块抽离出来。
  • 将前缀树作为一个模块用于路由router之中。
  • 动态匹配过程中,通配符动态匹配到的值需要进行存储,给Context结构体中加一个属性Params用于保存动态匹配到的属性值。

day4-group(2022.4.11)

内容

  • 实现路由分组控制功能,支持路由分组嵌套
  • 路由分组方便后续加入中间件(day5-middlewares完成)

步骤

  • 增加RouterGroup类,记录每一个路由分组
  • RouterGroup同时嵌入Engine中,Engine作为整个框架顶层的分组,记录所有的路由分组信息。
  • RouterGroup中加入*Engine属性,可以由任意一个路由分组到达作为顶层分组的Engine中。

新增加结构体

type Engine struct {
	*RouterGroup //这里我不确定,是表示Engine本身也作为一个顶层的路由分组吗?
	router       *router
	groups       []*RouterGroup //存储所有的路由分组
}
type RouterGroup struct {
	prefix      string        //路由组匹配前缀
	middlewares []HandlerFunc //中间件
	parent      *RouterGroup  //支持嵌套的路由分组
	engine      *Engine       //所有的路由分组都共享一个Engine实例
}

day5-middlewares(2022.4.11)

内容

  • 设计并实现Web框架的中间件机制
  • 实现一个超简单的通用Logger中间件(也就三两行代码)

步骤

  • 每一个路由分组RouterGroup对象都有一个属性middlewares(类型为[]HandlerFunc)存储该分组的所有的中间件
  • 进行路由匹配的时候,请求路径每匹配到一个路由分组就会把该路由分组的所有中间件加载到一个slice中,之后将该slice作为一个Context类型对象的handlers属性值,再把该Context 对象交给全局的Engine实例(也就是main函数中创建的r := gee.New())执行

bug

在一个地方写错了,找了几个小时的bug

v1 := r.Group("/v1")

这里我写成"v1"了,furious


day7-panic-recovery(2022.4.11)

内容

-实现Gee框架的错误处理机制,避免因为一个panic而整个服务崩溃

步骤

-简单处理,就是添加一个全局中间件recovery

疑问

我在gee包中,想实现一个gee.Default() 函数返回一个默认的Engine实例,就是想其中预先加入部分中间件,那就会引用到middlewares包中的函数。

gee目录下的go.mod文件里面引入middlewares,同时我也已经在middlewares 包里面引入了gee。 此时都没报错,但是我在day7-panic-recover目录下的go.mod引入gee包和middlewares包就会报错(因为在main函数里面会用到gee.Default()

About

参考极客兔兔的《7天用Go从零实现Web框架Gee教程》

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages