golang gin 为不同的查询提供一条路线
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 为不同的查询提供一条路线的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

OpenSSL,作为广泛应用于安全通信的开源库,提供了加密算法、密钥和证书管理等功能。然而,其历史版本中存在一些已知安全漏洞,其中一些危害极大。本文将重点介绍Debian系统中OpenSSL的常见漏洞及应对措施。DebianOpenSSL已知漏洞:OpenSSL曾出现过多个严重漏洞,例如:心脏出血漏洞(CVE-2014-0160):该漏洞影响OpenSSL1.0.1至1.0.1f以及1.0.2至1.0.2beta版本。攻击者可利用此漏洞未经授权读取服务器上的敏感信息,包括加密密钥等。

后端学习路径:从前端转型到后端的探索之旅作为一名从前端开发转型的后端初学者,你已经有了nodejs的基础,...

Go语言中用于浮点数运算的库介绍在Go语言(也称为Golang)中,进行浮点数的加减乘除运算时,如何确保精度是�...

Go爬虫Colly中的Queue线程问题探讨在使用Go语言的Colly爬虫库时,开发者常常会遇到关于线程和请求队列的问题。�...

在BeegoORM框架下,如何指定模型关联的数据库?许多Beego项目需要同时操作多个数据库。当使用Beego...

Go语言中字符串打印的区别:使用Println与string()函数的效果差异在Go...

Go语言中使用RedisStream实现消息队列时类型转换问题在使用Go语言与Redis...

GoLand中自定义结构体标签不显示怎么办?在使用GoLand进行Go语言开发时,很多开发者会遇到自定义结构体标签在�...
