27-gin框架路由管理

重定向
HTTP重定向(页面重定向)

HTTP重定向很容易。内部、外部重定向均支持。

/ 重定向
func RedictDemo() {
	r := gin.Default()

	r.GET("/test", func(ctx *gin.Context) {
		ctx.Redirect(http.StatusMovedPermanently, "https://www.baidu.com/") // 返回的是301,页面重定向
	})

	r.Run(":8080")
}
路由重定向(内部重定向)

路由重定向,使用HandleContext

// 路由重定向
func RedictDemo2() {
	r := gin.Default()

	r.GET("/test1", func(ctx *gin.Context) {
		// 指定重定向URL
		ctx.Request.URL.Path = "/test2"
		r.HandleContext(ctx)
	})

	r.GET("/test2", func(ctx *gin.Context) {
		ctx.JSON(http.StatusOK, gin.H{
			"hello": "爱写代码的小男孩",
		})
	})

	r.Run(":9999")
}

结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a5G3w9rG-1657251558750)(/Users/alblue/Library/Application Support/typora-user-images/image-20220330161440288.png)]

Gin 路由
普通路由
r.GET("/index", func(c *gin.Context) {...})
r.GET("/login", func(c *gin.Context) {...})
r.POST("/login", func(c *gin.Context) {...})

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

r.Any("/test", func(c *gin.Context) {...})

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

r.NoRoute(func(c *gin.Context) {
		c.HTML(http.StatusNotFound, "views/404.html", nil)
	})
路由组

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

func main(){
  r := gin.Default()
  userGroup := r.Group("/user")
  {
    userGroup.GET("/index",func(ctx, *gin.Context){...})
    userGroup.GET("/login",func(ctx, *gin.Context){...})
    userGroup.POST("login",func(ctx, *gin.Context){...})
  }
  shopGroup := r.Group("/shop")
  {
    shopGroup.GET("/index",func(ctx, *gin.Context){...})
    shopGroup.GET("/cart",func(ctx, *gin.Context){...})
    shopGroup.POST("/checkout",func(ctx, *gin.Context){...})
  }
  
  r.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) {...})
	}

通常我们将路由分组用在划分业务逻辑或划分API版本时。

路由原理

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

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

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值