Gin路由组

263 阅读2分钟

Gin路由组

Gin路由组接收任意请求的路由接收没有被定义的路由路由组完整代码

接收任意请求的路由

  • 区别于以往的GET()函数只能处理一种请求,Any()函数可以处理各种函数

  • 语法: func (group *RouterGroup) Any(relativePath string, handlers ...HandlerFunc){}

  • 案例:

     //可以接收任意请求的函数
         r.Any("/index", func(c *gin.Context) {
             switch c.Request.Method { 
             case http.MethodGet:
                 c.JSON(http.StatusOK, gin.H{
                     "status": "Get",
                 })
             case http.MethodPost:
                 c.JSON(http.StatusOK, gin.H{
                     "status": "Post",
                 })
             }
         })
    

接收没有被定义的路由

  • 用于处理各种没有被定义的路由

  • 语法: func (engine *Engine) NoRoute(handlers ...HandlerFunc) {}

  • 案例:

     //用于处理各种没有定义的路由被用户访问后显示的内容
         r.NoRoute(func(c *gin.Context) {
             c.HTML(http.StatusOK, "Not.html", gin.H{
                 "email": "2585295809@qq.com",
             })
         })
     ​
    

路由组

  • 顾名思义,所谓路由组指的就是路由的组,也就是可以对路由进行分组管理的用法

  • 语法: func (group *RouterGroup) Group(relativePath string, handlers ...HandlerFunc) *RouterGroup {}

  • 案例:

         //路由组(方便管理同一组的各种请求
         indexGroup := r.Group("/index")
         {
             //  index/name
             indexGroup.GET("/name", func(c *gin.Context) {
                 c.JSON(http.StatusOK, gin.H{
                     "status": "name ok",
                 })
             })
             // index/age
             indexGroup.POST("/age", func(c *gin.Context) {
                 c.JSON(http.StatusOK, gin.H{
                     "status": "age ok",
                 })
             })
         }
    
  • 路由组嵌套(也就是在路由组中在添加一个路由组)

  • 案例:

     //路由组(方便管理同一组的各种请求
         indexGroup := r.Group("/index")
         {
             //  index/name
             indexGroup.GET("/name", func(c *gin.Context) {
                 c.JSON(http.StatusOK, gin.H{
                     "status": "name ok",
                 })
             })
             // index/age
             indexGroup.POST("/age", func(c *gin.Context) {
                 c.JSON(http.StatusOK, gin.H{
                     "status": "age ok",
                 })
             })
             //嵌套路由组
             ageGroup := indexGroup.Group("/age")
             {
                 // /index/age/dog
                 ageGroup.GET("/dog", func(c *gin.Context) {
                     c.JSON(http.StatusOK, gin.H{
                         "status": "dog ok",
                     })
                 })
             }
         }
    

完整代码

 package main
 ​
 import (
     "github.com/gin-gonic/gin"
     "log"
     "net/http"
 )
 ​
 func main() {
     r := gin.Default()
 ​
     //解析静态文件
     r.LoadHTMLFiles("Not.html")
 ​
     //可以接收任意请求的函数
     r.Any("/index", func(c *gin.Context) {
         switch c.Request.Method {
         case http.MethodGet:
             c.JSON(http.StatusOK, gin.H{
                 "status": "Get",
             })
         case http.MethodPost:
             c.JSON(http.StatusOK, gin.H{
                 "status": "Post",
             })
         }
     })
     //用于处理各种没有定义的路由被用户访问后显示的内容
     r.NoRoute(func(c *gin.Context) {
         c.HTML(http.StatusOK, "Not.html", gin.H{
             "email": "2585295809@qq.com",
         })
     })
 ​
     //路由组(方便管理同一组的各种请求
     indexGroup := r.Group("/index")
     {
         //  index/name
         indexGroup.GET("/name", func(c *gin.Context) {
             c.JSON(http.StatusOK, gin.H{
                 "status": "name ok",
             })
         })
         // index/age
         indexGroup.POST("/age", func(c *gin.Context) {
             c.JSON(http.StatusOK, gin.H{
                 "status": "age ok",
             })
         })
         //嵌套路由组
         ageGroup := indexGroup.Group("/age")
         {
             // /index/age/dog
             ageGroup.GET("/dog", func(c *gin.Context) {
                 c.JSON(http.StatusOK, gin.H{
                     "status": "dog ok",
                 })
             })
         }
     }
 ​
     err := r.Run(":8080")
     if err != nil {
         log.Println(err)
         return
     }
 }
 ​