Heim  >  Artikel  >  Backend-Entwicklung  >  Golang Gin bietet eine Route für verschiedene Abfragen

Golang Gin bietet eine Route für verschiedene Abfragen

PHPz
PHPznach vorne
2024-02-14 11:27:08524Durchsuche

golang gin 为不同的查询提供一条路线

php-Editor Xinyi stellt Ihnen ein leistungsstarkes Web-Framework vor: Golang Gin. Gin ist ein leichtes Web-Framework auf Golang-Basis, das eine prägnante und effiziente Route für verschiedene Abfragen bietet. Egal, ob es sich um eine GET-Anfrage oder eine POST-Anfrage handelt, Gin kann damit problemlos umgehen und macht Ihren Entwicklungsprozess einfacher und schneller. Unabhängig davon, ob JSON-Daten oder HTML-Vorlagen verarbeitet werden, bietet Gin umfassende Funktionalität und flexible Erweiterbarkeit. Egal, ob Sie Anfänger oder erfahrener Entwickler sind, Gin ist Ihre beste Wahl.

Frageninhalt

Ist es möglich, eine Route zu haben, die :item (name) 或 :id in Gin enthält?

Beispiel:

r.get("/inventories/(:item|:id)", controllers.findinventory)

Dann mache ich vielleicht etwas Ähnliches...

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})
}

Oder gibt es eine Möglichkeit, eine Route zum Ausführen beider Arten von Abfragen zu verwenden?

Problemumgehung

Nein, dieser Vorgang wird nicht unterstützt. Aber es muss eine Möglichkeit geben, Artikel und ID zu unterscheiden. So ist es einfach, die Logik selbst zu implementieren.

So:

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})
}

Aber wenn es nicht unterschieden werden kann, müssen Sie zwei separate Anforderungspfade haben, z. B.

  • /inventories/by-item/:item
  • und /inventories/by-id/:id

Update 31.05.2023: Kommentare von @epicadidash und @boyvinall in der Antwort zusammengeführt. Danke!

Das obige ist der detaillierte Inhalt vonGolang Gin bietet eine Route für verschiedene Abfragen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen