Go + Gin 中静态资源路由与后端 API 路由冲突如何解决?
go + gin 静态资源路由与后端 api 路由冲突
在使用 go 和 gin 框架时,有时会遇到静态资源路由与后端 api 路由冲突的问题。
出错示例
下面的代码展示了如何设置一个静态资源路由和一个 api 路由:
package main import ( "github.com/gin-gonic/gin" ) func main() { r := gin.default() // 静态资源 r.static("/", "./assets") // api api := r.group("/api/v1") { api.get("user", test) } r.run(":8080") }
在这种情况下,访问 /api/v1/user 会导致以下错误:
panic: '/api/v1/:user' in new path '/api/v1/:user' conflicts with existing wildcard '/<em>filepath' in existing prefix '/</em>filepath'
解决方法
解决此冲突的一个简单方法是为静态资源路由添加一个前缀。例如:
r.static("/file", "./assets")
现在,访问 /file/image.png 将命中静态资源路由,而访问 /api/v1/user 将命中 api 路由。
其他注意事项
需要注意的是,gin 的路由遵循前缀树结构。这意味着动态路由会占据一个独占节点。因此,如果使用动态参数,例如 :id,则应确保其有独占的前缀。例如:
api.GET("users/:id", Test) // 会与 "users/article" 冲突 api.GET("users/_:id", Test) // 可以避免冲突,因为前缀不同
以上就是Go + Gin 中静态资源路由与后端 API 路由冲突如何解决?的详细内容,更多请关注其它相关文章!