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

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

WBOY
WBOYavant
2024-02-14 20:51:07612parcourir

如何像 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()
}

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"`
}

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)
        }
    }
}
  1. 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"
    }
]

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!

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