Maison > développement back-end > Golang > Comment ajouter un nom à la route du gin comme Laravel ?

Comment ajouter un nom à la route du gin comme Laravel ?

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Libérer: 2024-02-14 20:51:07
avant
732 Les gens l'ont consulté

如何像 laravel 一样为 gin 路由添加名称?

l'éditeur php Strawberry vous présentera comment ajouter un nom à la route du Gin comme Laravel. Gin est un framework Web en langage Go rapide, flexible et efficace, mais contrairement à Laravel, il n'a pas de fonctionnalité de nom de route intégrée. Cependant, nous pouvons réaliser cette fonctionnalité avec quelques astuces simples. Dans cet article, nous partagerons une méthode simple pour ajouter un nom aux routes Gin afin d'améliorer la lisibilité et la maintenabilité du code. commençons!

Contenu de la question

Je souhaite ajouter un nom à la route du gin car je dois collecter toutes les routes et les afficher sur la page. route.go

func main() {
    r := gin.Default()
    r.GET("/api/user/list", handler1)
    r.POST("/api/user/create",handle2)  
    r.Run()
}
Copier après la connexion

Voici la structure que je dois collecter :

var Routes []Route
type Route struct {
    Name       string `json:"name"`
    Sign       string `json:"sign"`
    HttpMethod string `json:"http_method"`
    HttpPath   string `json:"http_path"`
}
Copier après la connexion

Qu'ai-je essayé ?

1. Il ne s'agit pas d'une méthode automatique et nécessite une maintenance manuelle des noms de routes.

var RouteNameMap = map[string]string{
"api.user.list":"Get User List",
"api.user.create": "Create an User"
}

func ParseRoutes(r *gin.Engine, group string) {
    routes := r.Routes()
    for _, route := range routes {
        if strings.HasPrefix(route.Path, group) {
            sign := strings.Replace(strings.Trim(route.Path, "/"), "/", ".", -1)
            item := Route{
                Name:       RouteNameMap[sign],
                Sign:       sign,
                HttpMethod: route.Method,
                HttpPath:   route.Path,
            }
            Routes = append(Routes, item)
        }
    }
}
Copier après la connexion
  • Utilisez un middleware, mais cette méthode doit être obtenue après avoir demandé l'itinéraire. Je souhaite obtenir toutes les données après le démarrage du projet.
  • 3. Semblable à la première méthode :

    func main() {
        r := gin.Default()
        MyGET(r,"/api/user/list", handler1,"Get User List")
        MyPOST(r,"/api/user/create",handle2,"Create an User")
        r.Run()         
    }
    
    func MyPOST(engine *gin.Engine, path string, handlerFunc gin.HandlerFunc, name string) {
        engine.POST(path, handlerFunc)
        Routes = append(Routes, Route{
            Name:       name,
            Sign:       strings.Replace(strings.Trim(path, "/"), "/", ".", -1),
            HttpMethod: "POST",
            HttpPath:   path,
        })
    }
    output:
    [{
            "name": "Get User List",
            "sign": "api.user.list",
            "http_method": "GET",
            "http_path": "/api/user/list"
        },
        {
            "name": "Create an User",
            "sign": "api.user.create",
            "http_method": "post",
            "http_path": "/api/user/create"
        }
    ]
    Copier après la connexion

    Mais j'estime que cette méthode ne répond pas aux normes. J'espère ajouter un paramètre de nom similaire aux méthodes POST et GET de gin. Et ce paramètre de nom peut être analysé dans la méthode ParseRoutes, que dois-je faire ? Merci

    Solution

    Alors, quel est le problème avec la troisième méthode ?

    Si le framework Route of the Gin ne fournit pas de paramètres de réglage Name, alors vous ne pouvez faire que ceci :

    1. Soumettez le code au framework Gin et laissez le framework Gin répondre à vos besoins
    2.  ;
    3. Réécrivez le framework Gin et abandonnez les mises à jour ultérieures du framework Gin
    4. Enveloppez simplement une fonction vous-même, comme la troisième méthode ci-dessus.

    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!

    Étiquettes associées:
    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