导图社区 Gee web知识汇总
极客兔兔Gee web知识汇总,梳理了基础定http服务、Context的实现等内容,希望梳理的内容对你有所帮助!
社区模板帮助中心,点此进入>>
论语孔子简单思维导图
《傅雷家书》思维导图
《童年》读书笔记
《茶馆》思维导图
《朝花夕拾》篇目思维导图
《昆虫记》思维导图
《安徒生童话》思维导图
《鲁滨逊漂流记》读书笔记
《这样读书就够了》读书笔记
妈妈必读:一张0-1岁孩子认知发展的精确时间表
Gee
第一章节:基础的 http 服务
重要环节:实现 http.Handler 接口
实现 ServeHttp 方法
参数 w http.ResponseWriter, req *http.Request
gee
HandlerFunc 类型
函数类型 func(http.ResponseWriter, *http.Request)
Engine结构体
router 参数(路由映射表)
map[string]HandlerFunc
New 函数
返回一个Engine结构体指针
addRoute 方法
参数:method string, pattern string, handler HandlerFunc 无返回值
key 值
method + "-" + pattern
例如:GET-/users
将 key 值与 handler 匹配,注册到路由表中
GET POST 方法
参数:pattern string, handler HandlerFunc 无返回值
利用 addRoute 函数将 method 和 handler 注册到路由表中
Run 方法
参数:addr string 返回值是 Error 类型的 err
返回 http.ListenAndServe(addr, engine)
ServeHttp 方法
参数:w http.ResponseWriter, req *http.Request 无返回值
解析请求的路径,查找路由映射表,如果查到,就执行注册的处理方法。如果查不到,就返回 404 NOT FOUND 。
第二章:Context的实现
重要环节:仿照 gin 框架的 Context 对整个消息内容做个简单封装
设计需要考虑未来添加动态路由,中间件等,对外简化
context
H 类型
map[string]interface{}
构建json数据时更加简洁
Context 结构体
Writer http.ResponseWriter Req *http.Request // request info Path string Method string // response info StatusCode int
newContext 函数
参数:w http.ResponseWriter, req *http.Request 返回一个 Context 指针
PostForm 方法
参数:key string 返回 string 类型
提交表单
Query 方法
查找 Req 中 key 对应的 value
Status 方法
参数:code int 无返回值
设置状态码写入 Header
SetHeader 方法
参数: key string, value string 无返回值
将 key 和 value 写入 Writer 的 Header 中
响应方法
String 方法
参数:code int, format string, values ...interfaces{} 无返回值
Content-type 设置为 text/plain ,设置状态,写入 []byte(fmt.Sprintf(format,values...))
JSON 方法
参数:code int, obj interface{} 无返回值
Content-type 设置为 application/json,设置状态
Data 方法
参数:code int, data []byte 无返回值
设置状态,写入 data
HTML 方法
参数:code int, html string 无返回值
Content-type 设置为 text/html ,设置状态,写入 []byte(html)
router
router 结构体
handlers 参数
map[string]HandlerFunc{}
对第一章的 gee 中的 Engine 结构体中的 router 单独做个封装
newRouter 函数
与第一章 gee 中 New 方法相同
与第一章 gee 中 addRoute 相比多了 log 打印 method 和 pattern
handle 方法
参数:c *Context 无返回值
与第一章 gee 中的 ServeHttp 大致相同
基于 router 和 context 进行修改
func(c *Context)
Engine 结构体
router *router
在返回的结构体指针中使用 newRouter 函数
调用 router.addRoute 方法
调用 addRoute 方法
使用 newContext 函数创建一个新的 Context 对象 c 并调用 router.handle 方法