Gin框架中的路由使用的是httprouter这个库。
其基本原理就是构造一个路由地址的前缀树。

1 普通路由

  1. r.GET("/index", func(c *gin.Context) {...})
  2. r.GET("/login", func(c *gin.Context) {...})
  3. r.POST("/login", func(c *gin.Context) {...})

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

  1. r.Any("/user", func(c *gin.Context) {
  2. switch c.Request.Method {
  3. case "GET":
  4. c.JSON(http.StatusOK, "GET")
  5. case http.MethodPost:
  6. c.JSON(http.StatusOK, "POST")
  7. }
  8. }

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

  1. r.NoRoute(func(c *gin.Context) {
  2. c.HTML(http.StatusNotFound, "views/404.html", nil)
  3. })

2 路由组

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

  1. func main() {
  2. r := gin.Default()
  3. userGroup := r.Group("/user")
  4. {
  5. userGroup.GET("/index", func(c *gin.Context) {...})
  6. userGroup.GET("/login", func(c *gin.Context) {...})
  7. userGroup.POST("/login", func(c *gin.Context) {...})
  8. }
  9. shopGroup := r.Group("/shop")
  10. {
  11. shopGroup.GET("/index", func(c *gin.Context) {...})
  12. shopGroup.GET("/cart", func(c *gin.Context) {...})
  13. shopGroup.POST("/checkout", func(c *gin.Context) {...})
  14. }
  15. r.Run()
  16. }