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

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

PHPz
Libérer: 2024-02-14 11:27:08
avant
556 Les gens l'ont consulté

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)
Copier après la connexion

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})
}
Copier après la connexion

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)
Copier après la connexion
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})
}
Copier après la connexion

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!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal