Go Web——Gin实现路由分组

文章目录

  • 普通路由
  • 路由分组
  • 路由原理


普通路由

package main

import (
	"net/http"

	"github.com/gin-gonic/gin"
)

func F1(c *gin.Context) {
	c.JSON(http.StatusOK, gin.H{
		"method": "GET",
	})
}
func F2(c *gin.Context) {
	c.JSON(http.StatusOK, gin.H{
		"method": "POST",
	})
}
func F3(c *gin.Context) {
	c.JSON(http.StatusOK, gin.H{
		"method": "PUT",
	})
}
func F4(c *gin.Context) {
	c.JSON(http.StatusOK, gin.H{
		"method": "DELETE",
	})
}

func main() {
	e := gin.Default()

	e.GET("/index", F1)
	e.POST("/index", F2)
	e.PUT("/index", F3)
	e.DELETE("/index", F4)

	e.Run()
}

此外,还有一个可以匹配所有请求方法的Any方法如下:

//请求方法集合
r.Any("/user", func(c *gin.Context) {

   switch c.Request.Method {
   case "GET":
      c.JSON(http.StatusOK, gin.H{"method": "GET"})
   case http.MethodPost:
      c.JSON(http.StatusOK, gin.H{"method": "POST"})
   }

   c.JSON(http.StatusOK, gin.H{
      "method": "Any",
   })
})

为没有配置处理函数的路由添加处理程序,默认情况下它返回404代码,下面的代码为没有匹配到路由的请求都返回views/404.html页面。

//NoRoute
r.NoRoute(func(c *gin.Context) {
   c.JSON(http.StatusNotFound, gin.H{"message": "http://www.baidu.com"})
})

路由分组

我们可以将拥有共同URL前缀的路由划分为一个路由组。习惯性一对{}包裹同组的路由,这只是为了看着清晰,你用不用{}包裹功能上没什么区别。

package main

import (
	"github.com/gin-gonic/gin"
)

func F1(c *gin.Context) {}
func F2(c *gin.Context) {}
func F3(c *gin.Context) {}
func F4(c *gin.Context) {}

func main() {
	router := gin.Default()

	// 简单的路由组: v1
	v1 := router.Group("/v1")
	{
		v1.POST("/login", F1)
		v1.POST("/submit", F2)
		v1.POST("/read", F3)
	}

	// 简单的路由组: v2
	v2 := router.Group("/v2")
	{
		v2.POST("/login", F1)
		v2.POST("/submit", F2)
		v2.POST("/read", F3)
	}

	router.Run()
}

路由组也是支持嵌套的,例如:

shopGroup := r.Group("/shop")
	{
		shopGroup.GET("/index", func(c *gin.Context) {...})
		shopGroup.GET("/cart", func(c *gin.Context) {...})
		shopGroup.POST("/checkout", func(c *gin.Context) {...})
		
		// 嵌套路由组
		xx := shopGroup.Group("xx")
		xx.GET("/oo", func(c *gin.Context) {...})
	}

路由原理

Gin框架中的路由使用的是httprouter这个库。

其基本原理就是构造一个路由地址的前缀树。

你可能感兴趣的:(Gin,Go,Web,前端,golang,gin)