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

你可能感兴趣的:(golang,开发语言,web)