golang gin 为不同的查询提供一条路线
短信预约 -IT技能 免费直播动态提醒
php小编新一将为您介绍一种强大的Web框架,即Golang Gin。Gin是一个基于Golang的轻量级Web框架,它为不同的查询提供了一条简洁高效的路线。无论是GET请求还是POST请求,Gin都可以轻松处理,让您的开发过程更加简单快捷。无论是处理JSON数据还是HTML模板,Gin都提供了丰富的功能和灵活的扩展性。无论您是初学者还是有经验的开发人员,Gin都是您的不二选择。
问题内容
gin 中是否可以有一个包含 :item
(name) 或 :id
的路由?
示例:
r.get("/inventories/(:item|:id)", controllers.findinventory)
然后我可能会做一些类似的事情......
func FindInventory(g *gin.Context) {
var inv models.Inventory
if item:
err := models.DB.Where("item = ?", g.Param("item")).First(&inv).Error
else:
err := models.DB.Where("id = ?", g.Param("id")).First(&inv).Error
if err != nil {
g.JSON(http.StatusBadRequest, gin.H{"error": "Record not found!"})
return
}
g.JSON(http.StatusOK, gin.H{"data": inv})
}
或者有没有办法使用一个路由来执行两种类型的查询?
解决方法
不,不支持此操作。但必须有某种方法来区分 item 和 id。所以自己实现逻辑很容易。
像这样:
r.get("/inventories/:item", controllers.findinventory)
func FindInventory(g *gin.Context) {
var inv models.Inventory
item := g.Param("item")
id, err := strconv.Atoi(item)
if err != nil {
err := models.DB.Where("item = ?", item).First(&inv).Error
} else {
err := models.DB.Where("id = ?", id).First(&inv).Error
}
if err != nil {
g.JSON(http.StatusBadRequest, gin.H{"error": "Record not found!"})
return
}
g.JSON(http.StatusOK, gin.H{"data": inv})
}
但是如果无法区分,那么您需要有两个单独的请求路径,例如
/inventories/by-item/:item
- 和
/inventories/by-id/:id
2023-05-31更新:将@epicadidash和@boyvinall的评论合并到答案中。谢谢!
以上就是golang gin 为不同的查询提供一条路线的详细内容,更多请关注编程网其它相关文章!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341