ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
从本章节开始的2个章节基本都是gin的核心知识点,如果您是初学者,建议只看 基础用法 ,先学会使用是最重要的。 当使用熟练后,再回头看 进阶学习 ,你会彻底明白其中原理,进阶学习都是gin源码解析,对初学者来说难度比较大。 基础用法 1.创建一个标准的路由与路由组 ``` // 使用 gin 路由包提供的默认路由创建一个路有引擎 router := gin.Default() // 创建一个路由组,并基于路由组创建具体路由 backend:=router.Group("/api/v1") // 使用已有路由组可以继续分组 users:=backend.Group("/users") // 这里的花括号,只是为了让代码块紧凑,没有其他任何含义,和 c、c++ 语言的语法块完全一样. { // 对于初学者,这里比较难理解的就是第二个参数。 // 这里您首先知道它是从容器获取了一个表单参数验证器,校验客户端请求的参数就行 // 具体细节在表单参数验证器做专门介绍 users.GET("list", validatorFactory.Create(consts.ValidatorPrefix+"UsersList")) users.POST("create", validatorFactory.Create(consts.ValidatorPrefix+"UsersCreate")) users.POST("edit", validatorFactory.Create(consts.ValidatorPrefix+"UsersEdit")) users.POST("destroy", validatorFactory.Create(consts.ValidatorPrefix+"UsersDestroy")) } ``` 2.带中间件的路由(组) 实际项目开发中,有一部分接口是开放的,但是有部分是需要鉴权认证的,那么针对需要鉴权认证的所有路由可以统一添加中间件进行鉴权认证,一般是token认证。 ``` // 针对以上用户组路由添加token中间件鉴权认证 // 创建一个理由组,并基于路由组创建具体路由 backend:=router.Group("/api/v1") // authorization.CheckTokenAuth() 是 ginskeleton 默认集成校验token的中加减,直接使用即可 // backend 加载了中间件,表示 /api/v1 开头的路由全部需要 token 校验 backend.Use(authorization.CheckTokenAuth()) //A users:=backend.Group("/users") // users 加载了中间件,表示 /api/v1/users 开头的路由全部需要 token 校验 users.Use(authorization.CheckTokenAuth()) // B, 注意: B 和 A 存在重复校验token,实际使用时不要重复验证,如果在 A 处加载,那么就取消 B 处的加载中间件的逻辑 { // 接下来定义具体路由(路径),对于初学者,这里比较难理解的就是第二个参数。 // 首先告诉各位这里是从容器获取了一个表单参数验证器,校验客户端请求的参数 // 具体细节在表单参数验证器做专门介绍 users.GET("list", validatorFactory.Create(consts.ValidatorPrefix+"UsersList")) users.POST("create", validatorFactory.Create(consts.ValidatorPrefix+"UsersCreate")) users.POST("edit", validatorFactory.Create(consts.ValidatorPrefix+"UsersEdit")) users.POST("destroy", validatorFactory.Create(consts.ValidatorPrefix+"UsersDestroy")) } ``` 3.不带中间件、不带参数验校验器的路由 验证码路由,该路由无需专门校验参数,所以可以直接调用控制器 进阶学习 4.路由、中间件相关的 gin 源码学习 看到这里我相信您已经学会了路由、路由组、中间件的创建与使用,那么更深入一步。 我们一起研究一下 users.GET("list", 参数2) 背后究竟发生了什么 当我们明白回调函数的本质以后,那么下面的代码理解起来,就是非常简单的一件事情了 以上过程总体上就是在定义路由组、路由路径、然后给路由路径编写各种回调函数,一个路由路径可以对应很多个回调函数,具体数量我们将在下一章节继续分析源码。 5.路由组、中间键、路由 各自的特点 5.1 路由组相关的gin源码 针对以上源码总结一下: api := router.Group("/api/") 只有使用 Group 函数创建出来的路由组可以继续创建更多路由组,一旦基于路由组调用了其他函数获取的结果,就只能去定义具体路由、加载中间件等,相关示例: 5.2中间件源码定义 5.3 路由背后的源码 学习到这里,再给大家看一段如下代码,我想大家瞬间就懂了。 对于初学者,关于第二个参数我们会在后续继续介绍,这里只要知道他本质上也是一个 func (c \*gin.Conetxt) { } 即可。