Go Web Framework Project
Go Web Framework Project
Web Framework Project
Introduction
- 参考gin框架
- 体现了框架设计的核心原则
Reason
- net/http提供了基础的web功能, 但是还缺少了许多简单的功能
Function
- 上下文Context
- 动态路由
- 前缀树 Trie Tree
- 分组控制 Group
- 中间件 Middlewares
Detail
net/http基础
- Engine实现ServerHTTP方法(成为http.Handler)
- Context拥有http.ResponseWrite和*http.Request
源码
1
2
3
4
5
6
7
8
9
// net/http 标准库
type Handler interface {
ServeHTTP(ResponseWriter, *Request)
}
type HandlerFunc func(ResponseWriter, *Request)
func (f HandlerFunc) ServeHTTP(w ResponseWriter, r *Request) {
f(w, r)
}
动态路由
- 前缀树Trie Tree实现
- 支持
:filed和*filed匹配
分组控制
- path加上group prefix
- 支持在分组上添加middlewares
- engine也属于一个prefix为空的分组, 方便支持中间件
中间件 Middlewares
- 中间件就是handleFunc, 它存在在group中, 在group执行注册的handleFunc前, 先执行自身所有中间件
- c.Next()来执行中间件, 执行顺序
- A Next前 -> B Next前 -> handleFunc -> B Next后 -> A Next后
- c.Next()来执行中间件, 执行顺序
- 常用中间件
- Authorize
- Logger
- Recover
- Timeout
- 熔断
- 等等
错误恢复
- go中的异常
- error type
- panic + recover
- 类似捕获异常, defer recover
- defer
- 执行时间
- return后, 函数结束前, 因此defer中的func可以拿到函数的返回值
- 执行顺序
- 最后的defer会先执行, 然后向上
- 执行时间
This post is licensed under CC BY 4.0 by the author.