最新公告
  • 欢迎您光临码农资源网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!加入我们
  • golang gin 为不同的查询提供一条路线

    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的评论合并到答案中。谢谢!

    想要了解更多内容,请持续关注码农资源网,一起探索发现编程世界的无限可能!
    本站部分资源来源于网络,仅限用于学习和研究目的,请勿用于其他用途。
    如有侵权请发送邮件至1943759704@qq.com删除

    码农资源网 » golang gin 为不同的查询提供一条路线
    • 7会员总数(位)
    • 25846资源总数(个)
    • 0本周发布(个)
    • 0 今日发布(个)
    • 292稳定运行(天)

    提供最优质的资源集合

    立即查看 了解详情