Maison  >  Article  >  développement back-end  >  golang gin fournit un itinéraire pour différentes requêtes

golang gin fournit un itinéraire pour différentes requêtes

PHPz
PHPzavant
2024-02-14 11:27:08524parcourir

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

l'éditeur php Xinyi vous présentera un puissant framework web, Golang Gin. Gin est un framework Web léger basé sur Golang qui fournit un itinéraire concis et efficace pour différentes requêtes. Qu'il s'agisse d'une requête GET ou d'une requête POST, Gin peut la gérer facilement, rendant votre processus de développement plus simple et plus rapide. Qu'il s'agisse de traiter des données JSON ou des modèles HTML, Gin offre des fonctionnalités riches et une évolutivité flexible. Que vous soyez débutant ou développeur expérimenté, Gin est votre meilleur choix.

Contenu de la question

Est-il possible d'avoir un itinéraire contenant du :item (name) 或 :id dans le gin ?

Exemple :

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

Alors je pourrais faire quelque chose de similaire...

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

Ou existe-t-il un moyen d'utiliser une seule route pour effectuer les deux types de requêtes ?

Solution

Non, cette opération n'est pas prise en charge. Mais il doit y avoir un moyen de différencier l'élément et l'identifiant. Il est donc facile de mettre en œuvre la logique vous-même.

Comme ça :

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

Mais s'il est impossible de le distinguer, vous devez alors avoir deux chemins de requête distincts, comme

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

Mise à jour 2023-05-31 : Fusion des commentaires de @epicadidash et @boyvinall dans la réponse. Merci!

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer