我正在参与掘金创作者训练营第5期,点击了解活动详情
一、Gin 入门
Gin 安装
Gin 官网介绍 Gin 是 Go语言最快的全功能Web框架
什么是Gin?
Gin是一个使用Go语言开发的Web框架。
它提供类似Martini的API,但性能更佳,速度提升高达40倍。
如果你是性能和高效的追求者, 你会爱上 Gin。
Gin 框架具有 API 友好,注释明确,具有快速灵活、容错方便等特点。
新创建一个 Go 项目 gin-quickstart,在该项目目录下执行 Gin 安装命令。
go get -u github.com/gin-gonic/gin
查看项目目录下的 go.mod 文件,多处很多相关的依赖。
创建 main.go 文件,输入如下代码:
// filename main.go
package main
// 导入 gin 依赖
import (
"github.com/gin-gonic/gin"
)
func main(){
// 创建路由 engine
r := gin.Default()
// 路由绑定函数
r.GET("/", func(context *gin.Context) {
context.String(200, "Hello, Gin Web")
})
// 启动,绑定端口
r.Run(":8080")
}
执行 main 文件,浏览器访问 localhost:8080
二、Gin 工作流程
Gin 核心对象
Engine:容器对象,是整个 Gin 框架的基础Engine.trees:负责存储路由和 handle 方法的映射,类似字典树的结构Engine.RouterGroup:RouteGroup 结构体中的 Handlers 存储着所有的中间件。Context:上下文对象,负责处理请求和响应,其中的 handlers 存储处理请求时中间件和处理方法。
Gin 启动流程
gin.Default()
Default() 函数返回一个已经添加了 Logger 和 Recovery 中间件的 Engine 实例,通过 engine.User() 注册了中间件。
Default() 函数中通过 gin.New() 方法来初始化 Engine 容器,初始化时进行了以下几个操作
- 将 RouterGroup 的 Handlers(数组) 设置成 nil, basePath 设置成 ”/“。
- RouterGroup 里面也有一个 Engine 指针,将刚刚初始化的 engine 赋值给了 RouterGroup 的 engine。
- 使用了 sync.Pool 专门存储 gin 的 Context,防止频繁的 GC 造成的低效。
r.GET() 注册路由
通过 GET 方法将路由映射到指定的函数。
handle 方法中奖处理请求的函数与中间件函数绑定并调用 addRoute 方法注册路由。
r.Run()
该方法中通过调用 net/http 启动服务, 传递 engine 对象来实现服务启动