首頁  >  文章  >  後端開發  >  golang gin 為不同的查詢提供一條路線

golang gin 為不同的查詢提供一條路線

PHPz
PHPz轉載
2024-02-14 11:27:08524瀏覽

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中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除