1. 创建路由器
首先,使用 gin.Default() 或 gin.New() 创建一个基础路由器
r := gin.New() // 创建普通路由器,没有中间件
r := gin.Default() //创建带有默认中间件的路由器
其中,gin.New() 不带任何的中间件,如果想要自定义中间件,一般使用gin.New() ,而 gin.Default() 则带有两个默认的中间件:Logger( ) 和 Recovery( )
- Logger中间件将日志写入gin.DefaultWriter,即使配置了GIN_MODE=release。
- Recovery中间件会recover任何panic。如果有panic的话,会写入500响应码
2. 普通路由
创建完路由器 r 后,将在 r 的基础上实现路由操作
r.GET("/index", func(c *gin.Context) {...})
r.PUT("/update", func(c *gin.Context) {...})
r.POST("/login", func(c *gin.Context) {...})
r.DELETE("/delete", func(c *gin.Context) {...})
上述四个路由为最基础的路由,当在 **根URL **后检测到对应的url时,会进入func函数进行处理。其中,func为处理器函数**HandlerFunc**,其标签一定如下所示
func Name (c *gin.Context){
}
即能被路由的函数,其入参一定要是指向gin的上下文的指针:**c *gin.Context**。当然,也可以用闭包作为路由目的地,此时就要返回一个以**c *gin.Context**作为入参的**HandlerFunc**函数:
func Out() gin.HandlerFunc {
return func (c *gin.Context){
...
}
}
常将闭包作为中间件使用。
路由可以指定多个目的处理器函数(中间件),其按照从左到右顺序执行,即:
r.GET("/index",func1,func2,...)
3. 路由组
我们可以将拥有共同URL前缀的路由划分为一个路由组。出于代码规范,通常要用 { } 将同组的路由包裹起来。使用gin包中的 r.Group(“root url”) 实现。路由组多用来区分不同的业务线路。
router := gin.Default()
r1 := router.Group("/home")
{
r1.GET("/index",func1)
r1.POST("/login",func2)
}
r2 := router.Group("/shop")
{
r2.GET("/product",func3)
r2.GET("/custom".func4)
}
当URL为 localhost:port/home/index 时进入func1;为 localhost:port/home/login 时进入func2;为 localhost: port/shop/product 时进入func3;为 localhost: port/shop/custom 时进入func4。<br />路由组是支持嵌套的:
router := gin.Default()
r1 := router.Group("/home")
{
r1.GET("/index",func1)
// 嵌套
r2 := r1.Group("/xx")
{
r2.GET("/index",func2)
r2.POST("/login",func3)
}
}