初识Gin框架实战案例-工程实践 | 青训营笔记
参加 [第六届青训营] 笔记创作第七篇
课程内容
对课程中所提到的Gin框架进行一次复习学习。
Gin框架知识点
Gin web 框架介绍
在此前课程中可以看到,Golang已经提供了一个 net/http 的库用以实现http协议。在此基础上,Go语言又编写出了一个基于httprouter开发的Web框架 —— Gin。
Gin 是 Golang 的一个微框架,有如下特点:
- 提供了一个简单而快速的方式来编写Web应用程序
- 使用HTTP请求路由 和 中间件 来处理请求和响应
- 提供了一些如 路由组 和 请求上下文 等高级功能
这些特点使得开发团队的代码风格统一,便于形成良好一致的编码规范。
Gin框架的安装
$ go get -u github.com/gin-gonic/gin
Gin搭建HTTP服务器
通过/ping接口请求响应一个JSON对象
然后,执行 go run example.go 来运行代码,并在浏览器中访问 HOST_IP:8080/ping,可以看到如下结果:
解析:
-
首先是创建Gin的路由器:
- gin.Default() 是 Gin 框架中的一个函数,这里 gin 的 Default 方法来创建一个路由 handler。
- 它默认使用了两个中间件:
- logger:用于记录请求和响应的日志。
- recovery:用于恢复程序崩溃的中间件。
-
然后通过 HTTP 方法绑定路由规则和路由函数。不同于 net/http 库的路由函数,gin 进行了封装,把 request 和 response 都封装到 gin.Context 的上下文环境。
-
最后是启动路由的 Run 方法监听端口。router.Run() 是用于启动 HTTP 服务器并监听指定的端口。默认监听端口为 ":8080"。除了 GET 方法外,gin 也支持 POST、PUT、DELETE、OPTION 等常用的 Restful 方法。
-
框架特殊结构体 与 函数
- Gin框架中专属的结构体和函数是 gin.Context 和 gin.H{ }。
- gin.Context 在每次请求时都会被实例化。它包含了请求和响应相关的信息,并提供了一些操作请求和响应的方法。在 Gin 框架中,每个请求都会创建一个新的 gin.Context实例,并在请求处理函数中作为参数传递。
- gin.H{} 是Gin框架提供的一个特殊函数,它可以接受多个键值对的参数,返回一个类型为 map[string]interface{} 的对象,帮助我们更方便地创建一个包含多个键值对的 map 对象,而不用手写 map[string]interface{} 。
- Gin框架中专属的结构体和函数是 gin.Context 和 gin.H{ }。
Gin的中间件
Gin采用中间件模式来处理请求和响应之间的逻辑。中间件函数可以在请求到达处理函数之前或之后执行,即对一组接口的统一操作。常用于日志记录log、错误handler、对接口鉴权等。
例如有一组 API 接口需要用户登录后有权限了才可以执行操作,如果这个时候没有中间件的鉴权,那编写代码时就必须在进入每个 API 接口前都加上权限验证的代码。有了中间件后,我们只需要创建一个中间件,权限的验证放到中间件,然后把这个中间件绑定到那一组 API 上即可。下面就实现一个简易的鉴权中间件。
func AuthMiddleWare() gin.HandlerFunc {
return func(c *gin.Context) {
token := c.Request.Header.Get("Authorization")
authorized := check(token) //调用认证方法
if authorized {
c.Next()
return
}
c.JSON(http.StatusUnauthorized, gin.H{
"error": "Unauthorized",
})
c.Abort()
return
}
}
func main() {
r := gin.Default()
r.GET("/path", AuthMiddleWare(), func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{"data": "ok"})
})
}
这里定义了一个 AuthMiddleWare 中间件,中间件的功能是提测请求的头部 Authorization,将获取的 token 调用认证方法判断,是否是合法的 token。然后在使用中就将该 AuthMiddleWare() 中间件绑定上去即可。