Gin框架路由
2021/11/30 23:09:17
本文主要是介绍Gin框架路由,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Gin框架路由
一、普通路由
r.GET("/index", func(c *gin.Context) {...}) r.GET("/login", func(c *gin.Context) {...}) r.POST("/login", func(c *gin.Context) {...})
package main import ( "github.com/gin-gonic/gin" "net/http" ) func main() { r := gin.Default() r.HEAD("/index", func(c *gin.Context) { c.JSON(http.StatusOK, gin.H{ "method": "head", }) }) r.GET("/index", func(c *gin.Context) { c.JSON(http.StatusOK, gin.H{ "method": "get", }) }) r.POST("/index", func(c *gin.Context) { c.JSON(http.StatusOK, gin.H{ "method": "post", }) }) r.PUT("/index", func(c *gin.Context) { c.JSON(http.StatusOK, gin.H{ "method": "put", }) }) r.PATCH("/index", func(c *gin.Context) { c.JSON(http.StatusOK, gin.H{ "method": "patch", }) }) r.DELETE("/index", func(c *gin.Context) { c.JSON(http.StatusOK, gin.H{ "method": "delete", }) }) r.Run(":9999") }
二、Any
匹配所有请求方法的Any
方法如下:
r.Any("/test", func(c *gin.Context) {...})
package main import ( "github.com/gin-gonic/gin" "net/http" ) func main() { r := gin.Default() // Any: 接收所有请求方式 r.Any("/any", func(c *gin.Context) { switch c.Request.Method { case http.MethodGet: c.JSON(http.StatusOK, gin.H{ "method": http.MethodGet, }) case http.MethodPost: c.JSON(http.StatusOK, gin.H{ "method": http.MethodPost, }) case http.MethodHead: c.JSON(http.StatusOK, gin.H{ "method": http.MethodHead, }) case http.MethodDelete: c.JSON(http.StatusOK, gin.H{ "method": http.MethodDelete, }) } }) r.Run(":9999") }
三、NoRoute
为没有配置处理函数的路由添加处理程序,默认情况下它返回404代码,下面的代码为没有匹配到路由的请求都返回views/404.html
页面。
r.NoRoute(func(c *gin.Context) { c.HTML(http.StatusNotFound, "views/404.html", nil) })
package main import ( "github.com/gin-gonic/gin" "net/http" ) func main() { r := gin.Default() // NoRoute:处理不存在的路由 r.NoRoute(func(c *gin.Context) { c.JSON(http.StatusOK, gin.H{ "msg": "访问资源不存在", }) }) r.Run(":9999") }
四、路由组
我们可以将拥有共同URL前缀的路由划分为一个路由组。习惯性一对{}
包裹同组的路由,这只是为了看着清晰,你用不用{}
包裹功能上没什么区别。
package main import ( "github.com/gin-gonic/gin" "net/http" ) func main() { r := gin.Default() // 路由组 bookRouteGroup := r.Group("/book") { bookRouteGroup.GET("/details", func(c *gin.Context) { c.JSON(http.StatusOK, gin.H{ "msg": "book", }) }) bookRouteGroup.POST("/add", func(c *gin.Context) { c.JSON(http.StatusOK, gin.H{ "msg": "add book", }) }) bookRouteGroup.DELETE("/move", func(c *gin.Context) { c.JSON(http.StatusOK, gin.H{ "msg": "delete book", }) }) } r.Run(":9999") }
五、路由组嵌套
路由组也是支持嵌套的,例如:
package main import ( "github.com/gin-gonic/gin" "net/http" ) func main() { r := gin.Default() // 路由组嵌套 shopRouteGroup := r.Group("/shop") { shopRouteGroup.GET("/details", func(c *gin.Context) { c.JSON(http.StatusOK, gin.H{ "msg": "shop", }) }) shopRouteGroup.POST("/add", func(c *gin.Context) { c.JSON(http.StatusOK, gin.H{ "msg": "add shop", }) }) // 路由嵌套 shopOrderRouteGroup := shopRouteGroup.Group("shopOrder") shopOrderRouteGroup.GET("/details", func(c *gin.Context) { c.JSON(http.StatusOK, gin.H{ "msg": "shop order", }) }) shopOrderRouteGroup.POST("/add", func(c *gin.Context) { c.JSON(http.StatusOK, gin.H{ "msg": "add shop order", }) }) shopOrderRouteGroup.DELETE("/move", func(c *gin.Context) { c.JSON(http.StatusOK, gin.H{ "msg": "delete shop order", }) }) } // NoRoute:处理不存在的路由 r.NoRoute(func(c *gin.Context) { c.JSON(http.StatusOK, gin.H{ "msg": "访问资源不存在", }) }) r.Run(":9999") }
通常我们将路由分组用在划分业务逻辑或划分API版本时。
六、路由原理
Gin框架中的路由使用的是httprouter这个库。
其基本原理就是构造一个路由地址的前缀树。
这篇关于Gin框架路由的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-09-21订单系统资料入门教程:轻松管理你的订单
- 2024-09-21Java部署资料:新手入门教程
- 2024-09-21Java部署资料:新手入门教程
- 2024-09-21Java订单系统资料:新手入门教程与实战指南
- 2024-09-21Java管理系统资料入门教程
- 2024-09-21从零开始学习Java监控系统资料
- 2024-09-21Java就业项目资料:新手入门的必备教程
- 2024-09-21Java全端资料:初学者指南
- 2024-09-21Java全栈资料入门教程及资源汇总
- 2024-09-21Java日志系统资料入门教程