您的位置:首页 > 健康 > 美食 > Gin 详解

Gin 详解

2024/10/6 20:33:31 来源:https://blog.csdn.net/qq_43157273/article/details/139751814  浏览:    关键词:Gin 详解

Gin

介绍

gin框架是一个基于go语言的轻量级web框架,它具有高效性、灵活性、易扩展性

路由

gin框架使用的是定制版的httprouter
其路由原理是大量使用公共前缀的树结构,注册路由的过程就是构造前缀树的过程。
具有公共前缀的节点也共享一个公共父节点。

在这里插入图片描述

  • 路由注册
// 在 Gin 中,路由通过 GET、POST、PUT、DELETE 等 HTTP 方法与 URL 路径的组合来定义。
// 这些方法直接作为 Gin 实例(通常命名为 r)的方法调用,接收一个字符串表示路径,一个或两个函数参数作为处理函数。
r := gin.Default()
// 注册 GET 路由
r.GET("/hello", func(c *gin.Context) {c.JSON(200, gin.H{"message": "Hello, world!"})
})
// 注册 POST 路由
r.POST("/login", loginHandler)
r.Run(":8080") // 启动服务器监听 8080 端口
  • 路由参数
// Gin 支持在路由路径中定义参数,这些参数可以通过 c.Param() 在处理函数中获取
// 动态路径参数:
r.GET("/users/:username", getUsers)
// 正则约束参数:
r.GET("/articles/:id([0-9]+)", getArticleByID)
  • 路由分组
// 通过创建 gin.RouterGroup 对象,可以为一组相关的路由设置共享的中间件、前缀等属性。
admin := r.Group("/admin")
admin.Use(AuthMiddleware) // 添加针对该分组的中间件
// 在分组内注册路由
admin.GET("/users", listAdminUsers)
admin.POST("/users", createAdminUser)
  • 路由重定向与别名
// Gin 允许设置路由重定向规则,将一个路径重定向到另一个路径:
r.GET("/old-path", func(c *gin.Context) {c.Redirect(http.StatusMovedPermanently, "/new-path")
})
  • 路由处理函数
处理函数接收一个 *gin.Context 参数,该对象包含了请求和响应的所有相关信息,通常完成以下任务:
- 读取请求数据:通过 c.Query()、c.PostForm()、c.ShouldBind() 等方法获取查询参数、表单数据或 JSON/XML 等请求体内容
- 响应数据:使用 c.JSON()、c.XML()、c.String()、c.File() 等方法向客户端发送响应
- 中间件:调用 c.Next() 传递控制权给下一个中间件或者结束请求
  • 嵌套路由与命名组
// Gin 支持嵌套的路由分组,可以创建层次化的路由结构:
v1 := r.Group("/api/v1", authMiddleware)
{users := v1.Group("/users"){users.GET("/:id", getUser)users.POST("/", createUser)}articles := v1.Group("/articles"){articles.GET("/:id", getArticle)articles.POST("/", createArticle)}
}
// 可以为分组命名,便于在中间件或其他地方引用:
auth := r.Group("/auth", AuthMiddleware)
{auth.GET("/login", loginHandler).Name("login")auth.POST("/logout", logoutHandler).Name("logout")
}
loginURL := r.MustGet("login").URL()  // 使用命名路由

中间件

中间件常用来实现一些通用的功能,如日志记录、权限校验、数据加工等分为全局中间件和局部中间件两种类型:全局中间件作用于所有路由之前,局部中间件则是作用于某个路由或路由组之前。
  • 流程控制函数
1. c.Next(): 调用该函数会将控制权交给下一个中间件函数,如果没有下一个中间件函数,则将控制权交给处理请求的路由处理函数2. c.Abort(): 调用该函数会立即终止当前中间件函数的执行,并且不会再调用后续的中间件函数或路由处理函数3. c.AbortWithStatus(code int): 调用该函数会终止当前中间件函数的执行,并返回指定的HTTP状态码给客户端4. c.NextWithError(): 调用该函数会将控制权交给下一个中间件函数,同时传递一个错误给下一个中间件函数或路由处理函数5. c.IsAborted(): 该函数用于判断当前请求是否已经被终止,返回一个布尔值表示请求是否已经被终止

context

用于处理 HTTP 请求和响应,是通过中间件来传递的
在 Gin 的处理流程中,Context 贯穿整个处理过程,用于传递请求和响应的信息
  • 参数绑定、表单验证
Bind()系列函数:根据request的数据类型,将其解析到结构体或map
  • 参数传递
有成员Keys,上游需要传递的变量可以放在里面,下游处理时再从里面取出来,实现上下游参数传递,对应Set()Get()方法
  • 渲染不同格式的响应
// JSON响应、文本字符串响应、HTML 响应
c.JSON()
c.String()
c.HTML()

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com