Golang Go语言中忽然发现 Gin 的路由冲突被解决了

版本: v1.8.1

func main() {
	r := gin.Default()
	r.GET("/v1/static", func(c *gin.Context) {
		c.JSON(200, gin.H{
			"message": "ping",
		})
	})
	r.GET("/v1/:pk", func(c *gin.Context) {
		c.JSON(200, gin.H{
			"message": "pong",
		})
	})
	r.Run()
}

很久没用 Gin 了,今天测试时才发现静态路由和参数路由不再报错,不过/v1/static/v1/*path还是有问题


Golang Go语言中忽然发现 Gin 的路由冲突被解决了

更多关于Golang Go语言中忽然发现 Gin 的路由冲突被解决了的实战教程也可以访问 https://www.itying.com/category-94-b0.html

9 回复

更多关于Golang Go语言中忽然发现 Gin 的路由冲突被解决了的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


我就是因为这个原因最后自己拼了个框架,没想到啥时候解决了,,

很久没用 gin 了,我今天才发现

我也是自己写了一个路由框架,刚写到不用 gin 最大的理由就是路由冲突,本着严谨的态度测试一下,没想到解决了

你注册顺序写反了,常量>变量>通配符 要按照优先级顺序倒着写就冲突了,冲突是从 httprouter 继承过来的祖传特性。

你把这俩路由换一下就冲突了

为何不亲自试一下呢?

我就是 1.8.1

我用这俩 route ,冲突了,

GET /user/:id
GET /user/:id/posts

在Golang的Go语言中,Gin框架的路由冲突问题是一个常见且需要注意的方面。关于Gin的路由冲突被解决的情况,可以从以下几个方面进行解读:

首先,Gin框架本身提供了强大的路由功能,包括静态路由、动态路由、路由分组等。然而,在使用这些功能时,如果不注意路由的设计,就可能会出现路由冲突的问题。

路由冲突通常发生在以下情况:

  • 静态路由与动态路由的前缀相同,但动态路由的参数部分与静态路由的子路径冲突。
  • 多个动态路由的前缀相同,但参数名或参数位置不同。

Gin框架在检测到路由冲突时,通常会在初始化阶段就抛出错误,以避免在运行时出现不可预知的行为。

对于已经解决的路由冲突问题,可能是开发者采取了以下措施之一:

  • 为静态资源路由添加了一个独特的前缀,使其与API路由区分开来。
  • 重新设计了动态路由的参数名和参数位置,以避免与其他路由冲突。
  • 使用了路由分组的功能,将相关路由放在同一个组下,并设置了组的前缀,从而减少了冲突的可能性。

总的来说,Gin框架的路由冲突问题可以通过合理的路由设计和使用框架提供的路由功能来解决。

回到顶部