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

Golang Gin bietet eine Route für verschiedene Abfragen

PHPz
Freigeben: 2024-02-14 11:27:08
nach vorne
557 Leute haben es durchsucht

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)
Nach dem Login kopieren

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})
}
Nach dem Login kopieren

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)
Nach dem Login kopieren
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})
}
Nach dem Login kopieren

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!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage