1. 创建路由器

首先,使用 gin.Default() 或 gin.New() 创建一个基础路由器

  1. r := gin.New() // 创建普通路由器,没有中间件
  2. r := gin.Default() //创建带有默认中间件的路由器
  1. 其中,gin.New() 不带任何的中间件,如果想要自定义中间件,一般使用gin.New() ,而 gin.Default() 则带有两个默认的中间件:Logger( ) Recovery( )
  • Logger中间件将日志写入gin.DefaultWriter,即使配置了GIN_MODE=release。
  • Recovery中间件会recover任何panic。如果有panic的话,会写入500响应码

2. 普通路由

创建完路由器 r 后,将在 r 的基础上实现路由操作

  1. r.GET("/index", func(c *gin.Context) {...})
  2. r.PUT("/update", func(c *gin.Context) {...})
  3. r.POST("/login", func(c *gin.Context) {...})
  4. r.DELETE("/delete", func(c *gin.Context) {...})
  1. 上述四个路由为最基础的路由,当在 **根URL **后检测到对应的url时,会进入func函数进行处理。其中,func为处理器函数**HandlerFunc**,其标签一定如下所示
  1. func Name (c *gin.Context){
  2. }
  1. 即能被路由的函数,其入参一定要是指向gin的上下文的指针:**c *gin.Context**。当然,也可以用闭包作为路由目的地,此时就要返回一个以**c *gin.Context**作为入参的**HandlerFunc**函数:
  1. func Out() gin.HandlerFunc {
  2. return func (c *gin.Context){
  3. ...
  4. }
  5. }

常将闭包作为中间件使用。
路由可以指定多个目的处理器函数(中间件),其按照从左到右顺序执行,即:

  1. r.GET("/index",func1,func2,...)

3. 路由组

我们可以将拥有共同URL前缀的路由划分为一个路由组。出于代码规范,通常要用 { } 将同组的路由包裹起来。使用gin包中的 r.Group(“root url”) 实现。路由组多用来区分不同的业务线路。

  1. router := gin.Default()
  2. r1 := router.Group("/home")
  3. {
  4. r1.GET("/index",func1)
  5. r1.POST("/login",func2)
  6. }
  7. r2 := router.Group("/shop")
  8. {
  9. r2.GET("/product",func3)
  10. r2.GET("/custom".func4)
  11. }
  1. URL localhost:port/home/index 时进入func1;为 localhost:port/home/login 时进入func2;为 localhost: port/shop/product 时进入func3;为 localhost: port/shop/custom 时进入func4。<br />路由组是支持嵌套的:
  1. router := gin.Default()
  2. r1 := router.Group("/home")
  3. {
  4. r1.GET("/index",func1)
  5. // 嵌套
  6. r2 := r1.Group("/xx")
  7. {
  8. r2.GET("/index",func2)
  9. r2.POST("/login",func3)
  10. }
  11. }