从代码中我们可以看出通过 Gin 实现一个最简单的 Web 服务器,只需 3 个步骤:
1)创建 Gin 实例
2)注册路由及处理函数
3)启动 Web 服务
Default() 方法实现如下功能:
1)创建 Gin 框架对象 Engine
2)配置 Gin 默认的中间件,Logger() 和 Recovery(),其实现分别位于 logger.go 和 recovery.go 文件内
3)返回 Gin 框架对象
实例化比较核心的功能是:
1)初始化 Engine 对象, 关键步骤是初始化路由组 RouterGroup。
2)初始化 pool, 这是核心步骤. pool 用来存储 context 上下文对象. 用来优化处理 http 请求时的性能。
完成 Gin 的实例化之后,我们可以通过 r.GET("/ping", func(c *gin.Context) {}) 定义 HTTP 路由及处理 handler 函数。
gin.GET 定义 HTTP GET 请求的路由及处理方法,并返回 IRoutes 对象实例。
RouterGroup [routergroup.go#L41] 用于配置路由,其中:
- Handlers 数组定义了 Gin 中间件调用的 handler 方法
- engine 为 gin.go 实例化时设置的 Engine 实例对象
推而广之,Gin 还支持如下等路由注册方法:
r.POST
r.DELETE
r.PATCH
r.PUT
r.OPTIONS
r.HEAD
以及 r.Any
Gin 实例化和路由设置后工作完成后,我们进入 Gin 生命周期执行的核心功能分析,Gin 究竟是如何启动 Web 服务,监听 HTTP 请求并执行 HTTP 请求处理函数生成响应的。
gin.Run() 是 net/http 标准库 http.ListenAndServe(addr, router) 的简写,功能是将路由连接到 http.Server 启动并监听 HTTP 请求。