Golang Go语言中 Gin 是否连这种简单的路由都会冲突

发布于 1周前 作者 gougou168 来自 Go语言

有两个路由 HTTP 的方法都是 PUT

  • /a/:param
  • /a/b/c

发现调用 /a/b/c 的时候,一直走的是 /a/:param 的逻辑

gin 的版本是 1.8.1

这两个路由的注册顺序无论怎么调都走不到 /a/b/c 的逻辑


Golang Go语言中 Gin 是否连这种简单的路由都会冲突
11 回复

试过了,并不会冲突。

更多关于Golang Go语言中 Gin 是否连这种简单的路由都会冲突的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


gin 我还用的 1.7.4

给个 demo ,gin 构建路由树失败时会 panic 的。你检查下是不是新的二进制。go version -m

调整下顺序就好了

上回看谁发的说解决冲突了,不过我好久没用 gin 了,就是觉得路由不太好用

强迫症 头像

拿 1.8.1 来试了一下,并没有问题,建议贴代码

路由匹配是有优先级的啊…你匹配上第一个了自然不会匹配第二个

你用的版本太老了

据说老版本会有问题,新的 fix 了

在Golang的Gin框架中,关于路由是否会发生冲突的问题,实际上取决于你如何定义这些路由。Gin本身是一个高性能的HTTP Web框架,设计用于快速开发Go Web应用,并且它提供了灵活的路由匹配机制。

通常情况下,如果你按照Gin的路由规则正确定义路由,简单的路由是不会发生冲突的。例如,定义两个完全不同的路径,如/home/about,是不会有任何冲突的。

然而,如果你定义了相似的路由,比如/user/:id/user/profile,这种情况下,由于:id是一个动态参数,它可以匹配任何字符串,包括profile,这就可能导致路由冲突。Gin在处理这种情况时,会优先匹配最具体的路由(即静态路径),如果找到匹配的静态路径,就不会再尝试匹配动态参数路由。

为了避免潜在的冲突,你可以采取以下措施:

  1. 确保动态路由参数和静态路径之间有明确的区分。
  2. 使用更具体的路由定义顺序,将静态路径放在动态路径之前。
  3. 利用Gin的中间件或自定义逻辑进一步控制路由的匹配行为。

总的来说,Gin框架的路由机制是强大且灵活的,只要合理规划路由结构,就可以避免简单的路由冲突问题。如果你遇到了具体的路由冲突情况,建议详细检查你的路由定义,或者查阅Gin的官方文档和社区资源,以获取更具体的解决方案。

回到顶部