7天用Go实现Web框架Gee教程
本文是学习模仿自https://geektutu.com/post/gee.html
在此基础上,加入自己的学习过程与理解
框架
设计框架之前,需要知道为什么需要使用框架,框架能解决什么问题。只有明白了这一点,才能设计出框架中的功能。
通俗来讲,使用框架,是因为框架实现了更多功能,让用户写的代码更加简便等等好处。
先来看看go语言的web服务。net/http简单的处理请求示例如下
func main() {
http.HandleFunc("/", handler)
http.HandleFunc("/count", counter)
log.Fatal(http.ListenAndServe("localhost:8000", nil))
}
func handler(w http.ResponseWriter, r *http.Request) {
for key, value := range r.Header {
fmt.Println(key, ":", value)
}
fmt.Fprintf(w, "URL.Path = %q\n", r.URL.Path)
}
func counter(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "count\n")
}
net/http库
提供了基础的Web功能,即监听端口,映射静态路由,解析HTTP报文。一些Web开发中简单的需求并不支持,需要手工实现。
- 动态路由:例如hello/:name,hello/*这类的规则。
- 鉴权:没有分组/统一鉴权的能力,需要在每个路由映射的handler中实现。
- 模板:没有统一简化的HTML机制。
- …
可以发现,当我们离开框架,使用基础库时,需要频繁手工处理的地方,就是框架的价值所在。
这原教程的源码,主要参考了Gin。
每个版本的讲解
Gee教程1.HTTP基础
Gee教程2.上下文Context