在本文中,我将为您介绍 Gin框架中路由以及它的控制器分别是什么概念给出一些阐述, 并引出它的分组路由知识。
Gin路由与控制器
1. 怎么理解路由?
通常,在web开发领域中,我们将路由理解为——一个URL与函数之间的映射关系。也可以理解为,路由是一个由客户端所发起的一个http请求,按照这种理解,路由实际上是一个过程,再细化到后端,就是在接到这个请求时,如何找到对应后端业务逻辑函数的过程。
在Gin框架里,它的路由是基于httprouter来实现的。
■ ■■■■
2. Gin的路由规则
它的一条路由规则是通过三个关键元素组成的。它们是:
● HTTP请求方法
● URL路径(端点)
● 控制器函数
/user/233
// 定义参数:id,可以匹配/user/233, /user/zhangsan/user/:id
// 以/users/ 开头的所有路径都匹配,匹配:/users/1,/users/200, /users/1/20, /users/1/1//users/*path
package mainimport ("github.com/gin-gonic/gin")func main() {r := gin.Default()// 路由定义post请求, url路径为:/login, 绑定 login 控制器函数r.POST("/login", login)r.Run()}// 控制器函数func login(c *gin.Context) {// 省略}
■ ■■■■
3. Gin路由示例
上面说了这么多,现在,看几个路由定义的例子:
package mainimport ("github.com/gin-gonic/gin")func main() {r := gin.Default()r.POST("/users", saveUser)r.GET("/users/:id", getUser)r.PUT("/users/:id", updateUser)r.DELETE("/users/:id", deleteUser)r.Run()}// 控制器函数实现func saveUser(c *gin.Context) {}func getUser(c *gin.Context) {}func updateUser(c *gin.Context) {}func deleteUser(c *gin.Context) {}
在实际开发中,一般不会把路由定义、控制器函数写在一个go源文件里面,这会导致随着项目越来越大,代码会越来越多,不方便维护。可以按照自己公司的项目结构,规划自己的业务模块。
Gin分组路由
1. 分组路由是?
顾名思义,路由分组,就是将路由分为了一组一组的,其实就是设置了同一类路由的url前缀。
比如,当我们在做API开发时,若要支持API的多个版本,我们可以通过分组路由来实现对API版本处理。
另外,利用分组这个特点,可以为一组路由API设置要鉴权,其他组API不设置鉴权,等等。
■ ■■■■
2. 示例展示
新建go文件,源代码如下:
package mainimport ("github.com/gin-gonic/gin")func main() {router := gin.Default()// v1路由组v1 := router.Group("/api/v1"){// 注册路由v1.POST("/register", registerEndpoint1)v1.POST("/login", loginEndpoint1)}// v2路由组v2 := router.Group("/api/v2"){// 注册路由v2.POST("/register", registerEndpoint2)v2.POST("/login", loginEndpoint2)}router.Run()}func registerEndpoint1(c *gin.Context) {// 省略}func loginEndpoint1(c *gin.Context) {// 省略}func registerEndpoint2(c *gin.Context) {// 省略}func loginEndpoint2(c *gin.Context) {// 省略}
[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.- using env: export GIN_MODE=release- using code: gin.SetMode(gin.ReleaseMode)[GIN-debug] POST /api/v1/register --> main.registerEndpoint1 (3 handlers)[GIN-debug] POST /api/v1/login --> main.loginEndpoint1 (3 handlers)[GIN-debug] POST /api/v2/register --> main.registerEndpoint2 (3 handlers)[GIN-debug] POST /api/v2/login --> main.loginEndpoint2 (3 handlers)[GIN-debug] Environment variable PORT is undefined. Using port :8080 by default[GIN-debug] Listening and serving HTTP on :8080
可以看到,日志中输出了我们注册了分组的路由。是不是很方便呢~~
■ ■■■■
总结
本文主要为您介绍了什么是路由、路由规则以及它的控制器, 并介绍了Gin的分组路由概念、场景与示例。
后续,我将为您逐步介绍Gin的一些其他教程,敬请期待~~。
长按二维码关注我们吧
不要错过