在 上一篇 Golang Gin 实战(二)| 简便的Restful API 实现 文章中,我们留了一个疑问,假如我们有很多用户,我们要为他们一个个注册路由(路径)吗?
路由路径
如下URL:
/users/123
/users/456
/users/23456以上等等,我们有很多用户,如果我们都一个个为这些用户注册这些路由(URL),那么我们是很难注册完的,而且我们还会有新注册的用户,可见这种办法不行。
usersusersid/users/ididusersidid路由参数
Ginfunc main() {
r := gin.Default()
r.GET("/users/:id", func(c *gin.Context) {
id := c.Param("id")
c.String(200, "The user id is %s", id)
})
r.Run(":8080")
}
http://localhost:8080/users/123The user id is 123http://localhost:8080/users/123123Ginhttprouterhttprouter/users/:id:idc.Param("id")/users/:idPattern: /users/:id
/users/123 匹配
/users/哈哈 匹配
/users/123/go 不匹配
/users/ 不匹配/users/哈哈GinGin/users/:id/users/:idr.GET("/users/list", func(c *gin.Context) {
//省略无关代码
})这时候我们运行程序的话,会出现如下提示:
panic: 'list' in new path '/users/list' conflicts with existing wildcard ':id' in existing prefix '/users/:id'Ginhttprouterhttprouter星号路由参数
:*/users/*idPattern: /users/*id
/users/123 匹配
/users/哈哈 匹配
/users/123/go 匹配
/users/ 匹配我们把上面的例子改下:
func main() {
r := gin.Default()
r.GET("/users/*id", func(c *gin.Context) {
id := c.Param("id")
c.String(200, "The user id is %s", id)
})
r.Run(":8080")
}
http://localhost:8080/users/123The user id is /123id123/123/http://localhost:8080/users/123/goThe user id is /123/go/http://localhost:8080/usershttp://localhost:8080/users/The user id is //users/users//users//usersr.GET("/users", func(c *gin.Context) {
c.String(200, "这是真正的/users")
})
http://localhost:8080/users这是真正的/users/users/*id/usersGingin.RedirectTrailingSlashtruefalsefunc main() {
r := gin.Default()
r.RedirectTrailingSlash = false
r.GET("/users/*id", func(c *gin.Context) {
id := c.Param("id")
c.String(200, "The user id is %s", id)
})
r.Run(":8080")
}
http://localhost:8080/users404 page not found小结
*?a=b&c=d精彩文章推荐
为了答谢新老朋友的转发、阅读和点赞支持,我给大家包了个现金红包,关注我的公众号,即可参与抽奖。在看到50,下次抽奖增加金额!
flysnow_org