Maison développement back-end Golang implémentation du routage feuille golang

implémentation du routage feuille golang

May 14, 2023 pm 03:57 PM

Avec la popularité du langage Go dans le développement Web, de plus en plus de développeurs tentent d'utiliser le langage Go pour développer des applications Web. Dans le développement d’applications Web, la mise en œuvre du routage est une partie très importante. Aujourd'hui, nous allons présenter un framework de routage basé sur le langage Go – leaf.

1. Qu'est-ce que Feuille ?

Leaf est une bibliothèque de routage légère en langage Go, flexible, facile à utiliser et efficace. Leaf peut non seulement être utilisé pour les services HTTP, mais également pour la mise en œuvre du routage de divers protocoles réseau tels que WebSocket et FTP.

Leaf peut prendre en charge la mise en œuvre d'API de style RESTful et fournit des fonctions middleware pour prendre en charge le développement et l'utilisation de middleware personnalisés. En outre, Leaf prend également en charge le traitement personnalisé des données de requête et de réponse HTTP, qui peuvent répondre à divers besoins commerciaux particuliers.

Le code source de Leaf est hébergé sur GitHub et est open source sous licence MIT, libre d'utilisation, de modification et de distribution.

2. Implémentation du routage dans Leaf

L'implémentation du routage dans Leaf est très simple, il suffit de créer un objet de routage puis d'ajouter des règles de routage. Voici un exemple simple :

package main

import (
    "fmt"
    "github.com/vardius/leaf"
)

func main() {
    r := leaf.NewRouter()
    r.GET("/", func(c *leaf.Context) {
        fmt.Fprintln(c.Writer, "Hello, Leaf!")
    })
    
    r.Run(":8080")
}
Copier après la connexion

Dans le code ci-dessus, nous avons créé un objet de routage via la fonction NewRouter et ajouté une règle de routage de requête GET à l'objet de routage, comme spécifié dans la règle The le chemin demandé est le chemin racine /. Lorsqu'une requête GET accède au serveur, la fonction anonyme correspondant à la règle de routage sera exécutée. La méthode de correspondance des règles de routage utilise l'algorithme de correspondance de préfixe, nous pouvons donc couvrir différents chemins de requête en définissant plusieurs règles. NewRouter 函数创建了一个路由对象,并在路由对象中添加了一个 GET 请求的路由规则,规则中指定了请求的路径为根路径 /。当有 GET 请求访问服务器时,会执行路由规则对应的匿名函数。路由规则的匹配方式使用的是前缀匹配算法,所以我们可以通过定义多条规则来覆盖不同的请求路径。

在 Leaf 中,路由规则支持参数传递。可以使用 :param 的方式来定义一个参数,如下所示:

r.GET("/user/:id", func(c *leaf.Context) {
    id := c.Params["id"]
    fmt.Fprintf(c.Writer, "User ID: %s", id)
})
Copier après la connexion

在这个例子中,我们定义了一个 GET 请求的路由规则,其中使用了参数 :id。当有 GET 请求访问 /user/123 时,Leaf 将自动匹配路由规则,并将参数 123 传递给匿名函数中的 id 变量。我们可以通过 c.Params 来获取传递给路由规则的参数值。

Leaf 还支持处理路由组。路由组是一组具有相同前缀的路由规则,可以通过 Group 函数来实现。下面是一个例子:

r.Group("/api/v1", func() {
    r.GET("/user/:id", func(c *leaf.Context) {
        id := c.Params["id"]
        fmt.Fprintf(c.Writer, "User ID: %s", id)
    })
    r.POST("/user", func(c *leaf.Context) {
        fmt.Fprintln(c.Writer, "Create User")
    })
    r.PUT("/user/:id", func(c *leaf.Context) {
        id := c.Params["id"]
        fmt.Fprintf(c.Writer, "Update User: %s", id)
    })
    r.DELETE("/user/:id", func(c *leaf.Context) {
        id := c.Params["id"]
        fmt.Fprintf(c.Writer, "Delete User: %s", id)
    })
})
Copier après la connexion

在上面的例子中,我们使用 Group 函数来创建了一个路由组,该组包含了所有以 /api/v1 开头的请求路径。在路由组内部,我们定义了一些 HTTP 请求的路由规则,其中包含了参数传递、GET、POST、PUT 和 DELETE 请求。

三、Leaf 的中间件支持

Leaf 还支持中间件的开发和使用。在 Leaf 中,中间件是一段在请求和响应之间进行处理的程序代码。中间件可以对请求和响应进行各种处理,如增加请求头、校验认证信息、处理请求参数和响应结果等。Leaf 通过 Use 方法来添加中间件,例如:

r.Use(func(c *leaf.Context) {
    // do something before request
    c.Next() // 执行下一个中间件或匿名函数
    // do something after request
})
Copier après la connexion

在这个例子中,我们定义了一个中间件,函数体内的代码将在请求通过路由规则匹配之前执行。在中间件中,我们可以通过调用 c.Next() 来执行下一个中间件或路由规则中的匿名函数。执行完匿名函数后,将回到当前中间件中执行后续代码。

当然,Leaf 也支持链式调用多个中间件,可以通过 AppendMiddleware 方法添加多个中间件,例如:

r.AppendMiddleware(A)
r.AppendMiddleware(B)
r.AppendMiddleware(C)
Copier après la connexion

以上例子中,我们通过 AppendMiddleware 方法依次添加了 A、B、C 三个中间件。当请求进来时,它们将被依次执行。

四、Leaf 的 MVC 模式支持

Leaf 还提供了基于 MVC 模式的开发支持。在 Leaf 中,我们可以通过 Controller 来定义一个控制器,控制器中可以定义多个处理方法。控制器可以实现任意的业务逻辑,Leaf 通过路由规则自动匹配到控制器中的方法,并执行之。下面是一个简单的例子:

type UserController struct {
    leaf.Controller
}

func (c *UserController) GetUser() {
    id := c.Params["id"]
    fmt.Fprintf(c.Writer, "User ID: %s", id)
}

func (c *UserController) CreateUser() {
    fmt.Fprintln(c.Writer, "Create User")
}

func (c *UserController) UpdateUser() {
    id := c.Params["id"]
    fmt.Fprintf(c.Writer, "Update User: %s", id)
}

func (c *UserController) DeleteUser() {
    id := c.Params["id"]
    fmt.Fprintf(c.Writer, "Delete User: %s", id)
}

func main() {
    r := leaf.NewRouter()
    userController := &UserController{}
    r.Group("/api/v1", func() {
        r.GET("/user/:id", userController.GetUser)
        r.POST("/user", userController.CreateUser)
        r.PUT("/user/:id", userController.UpdateUser)
        r.DELETE("/user/:id", userController.DeleteUser)
    })
    r.Run(":8080")
}
Copier après la connexion

在这个例子中,我们定义了一个 UserController 控制器,并在其中实现了 GetUserCreateUserUpdateUserDeleteUser 四个方法,分别用于处理 GET、POST、PUT 和 DELETE 请求。在路由组中,我们将这些方法与对应的请求进行了映射,并指定了路由规则的前缀为 /api/v1

Dans Leaf, les règles de routage prennent en charge le passage de paramètres. Vous pouvez utiliser :param pour définir un paramètre, comme indiqué ci-dessous :

c.SetHeader(key, value) // 设置响应头
c.GetHeader(key) // 获取请求头
c.SetCookie(cookie) // 设置 Cookie
c.GetCookie(name) // 获取 Cookie
c.SetStatusCode(code int) // 设置响应状态码
c.WriteJSON(v interface{}) // 响应 JSON 数据
c.WriteFile(file string) // 响应文件
c.String(code int, s string) // 响应字符串
Copier après la connexion
Dans cet exemple, nous définissons une règle de routage pour une requête GET, en utilisant le paramètre :id . Lorsqu'il y a une requête GET pour accéder à <code>/user/123, Leaf fera automatiquement correspondre les règles de routage et transmettra le paramètre 123 au id dans la variable de fonction anonyme. Nous pouvons obtenir les valeurs des paramètres transmises à la règle de routage via c.Params.

Leaf prend également en charge la gestion des groupes de routage. Un groupe de routage est un groupe de règles de routage avec le même préfixe, qui peut être implémenté via la fonction Group. Voici un exemple :

rrreee

Dans l'exemple ci-dessus, nous utilisons la fonction Group pour créer un groupe de routage qui contient toutes les routes commençant par le chemin de requête /api/v1. Au sein du groupe de routage, nous définissons certaines règles de routage pour les requêtes HTTP, notamment le passage de paramètres, les requêtes GET, POST, PUT et DELETE.

3. Prise en charge du middleware de Leaf🎜🎜Leaf prend également en charge le développement et l'utilisation du middleware. Dans Leaf, le middleware est un morceau de code de programme qui gère les requêtes et les réponses. Le middleware peut effectuer divers traitements sur les requêtes et les réponses, tels que l'ajout d'en-têtes de requête, la vérification des informations d'authentification, le traitement des paramètres de requête et des résultats de réponse, etc. Leaf ajoute un middleware via la méthode Use, par exemple : 🎜rrreee🎜Dans cet exemple, nous définissons un middleware, et le code dans le corps de la fonction sera exécuté avant que la requête ne corresponde aux règles de routage. Dans le middleware, nous pouvons exécuter le prochain middleware ou la fonction anonyme dans la règle de routage en appelant c.Next(). Après avoir exécuté la fonction anonyme, elle reviendra au middleware actuel pour exécuter le code suivant. 🎜🎜Bien sûr, Leaf prend également en charge l'appel en chaîne de plusieurs middlewares. Vous pouvez ajouter plusieurs middlewares via la méthode AppendMiddleware, par exemple : 🎜rrreee🎜Dans l'exemple ci-dessus, nous transmettons AppendMiddleware. code> > La méthode ajoute trois middlewares A, B et C en séquence. Au fur et à mesure que les demandes arrivent, elles seront exécutées séquentiellement. 🎜🎜4. Prise en charge du modèle MVC de Leaf🎜🎜Leaf fournit également un support de développement basé sur le modèle MVC. Dans Leaf, nous pouvons définir un contrôleur via Controller, et plusieurs méthodes de traitement peuvent être définies dans le contrôleur. Le contrôleur peut implémenter n'importe quelle logique métier, et Leaf fait automatiquement correspondre les méthodes du contrôleur via des règles de routage et les exécute. Voici un exemple simple : 🎜rrreee🎜Dans cet exemple, nous définissons un contrôleur UserController et y implémentons GetUser, CreateUser Le code des quatre méthodes >, UpdateUser et DeleteUser sont utilisés respectivement pour gérer les requêtes GET, POST, PUT et DELETE. Dans le groupe de routage, nous mappons ces méthodes aux requêtes correspondantes et spécifions le préfixe de la règle de routage comme /api/v1. 🎜🎜5. Traitement des requêtes et des réponses HTTP de Leaf🎜🎜Dans Leaf, nous pouvons traiter les données de requêtes et de réponses HTTP en fonction des besoins de l'entreprise. Leaf fournit une multitude de méthodes pour traiter les données de demande et de réponse, telles que : 🎜rrreee🎜Grâce à ces méthodes, nous pouvons facilement traiter les données de demande et de réponse. 🎜🎜6.Résumé🎜

Leaf est une très excellente bibliothèque de routage du langage Go. Elle présente non seulement les caractéristiques de légèreté, d'efficacité, de facilité d'utilisation, etc., mais fournit également une variété de fonctions telles que le middleware, le mode MVC et le traitement des requêtes et des réponses HTTP, qui peut répondre à nos besoins Divers besoins en matière de développement d'applications Web. Si vous recherchez une excellente implémentation de routage dans Go, Leaf vaut vraiment la peine d'être essayée.

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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Quelles sont les vulnérabilités de Debian OpenSSL Quelles sont les vulnérabilités de Debian OpenSSL Apr 02, 2025 am 07:30 AM

OpenSSL, en tant que bibliothèque open source largement utilisée dans les communications sécurisées, fournit des algorithmes de chiffrement, des clés et des fonctions de gestion des certificats. Cependant, il existe des vulnérabilités de sécurité connues dans sa version historique, dont certaines sont extrêmement nocives. Cet article se concentrera sur les vulnérabilités et les mesures de réponse communes pour OpenSSL dans Debian Systems. DebianopenSSL CONNUTS Vulnérabilités: OpenSSL a connu plusieurs vulnérabilités graves, telles que: la vulnérabilité des saignements cardiaques (CVE-2014-0160): cette vulnérabilité affecte OpenSSL 1.0.1 à 1.0.1F et 1.0.2 à 1.0.2 Versions bêta. Un attaquant peut utiliser cette vulnérabilité à des informations sensibles en lecture non autorisées sur le serveur, y compris les clés de chiffrement, etc.

Comment utilisez-vous l'outil PPROF pour analyser les performances GO? Comment utilisez-vous l'outil PPROF pour analyser les performances GO? Mar 21, 2025 pm 06:37 PM

L'article explique comment utiliser l'outil PPROF pour analyser les performances GO, notamment l'activation du profilage, la collecte de données et l'identification des goulots d'étranglement communs comme le processeur et les problèmes de mémoire. COMMANDE: 159

Comment rédigez-vous des tests unitaires en Go? Comment rédigez-vous des tests unitaires en Go? Mar 21, 2025 pm 06:34 PM

L'article traite des tests d'unité d'écriture dans GO, couvrant les meilleures pratiques, des techniques de moquerie et des outils pour une gestion efficace des tests.

Quel est le problème avec le fil de file d'attente dans GO's Crawler Colly? Quel est le problème avec le fil de file d'attente dans GO's Crawler Colly? Apr 02, 2025 pm 02:09 PM

Problème de threading de file d'attente dans Go Crawler Colly explore le problème de l'utilisation de la bibliothèque Crawler Crawler dans le langage Go, les développeurs rencontrent souvent des problèmes avec les threads et les files d'attente de demande. � ...

Quelles bibliothèques sont utilisées pour les opérations du numéro de point flottantes en Go? Quelles bibliothèques sont utilisées pour les opérations du numéro de point flottantes en Go? Apr 02, 2025 pm 02:06 PM

La bibliothèque utilisée pour le fonctionnement du numéro de point flottante dans le langage go présente comment s'assurer que la précision est ...

Transformant du développement frontal au développement back-end, est-il plus prometteur d'apprendre Java ou Golang? Transformant du développement frontal au développement back-end, est-il plus prometteur d'apprendre Java ou Golang? Apr 02, 2025 am 09:12 AM

Chemin d'apprentissage du backend: le parcours d'exploration du front-end à l'arrière-end en tant que débutant back-end qui se transforme du développement frontal, vous avez déjà la base de Nodejs, ...

Quelle est la commande Go FMT et pourquoi est-elle importante? Quelle est la commande Go FMT et pourquoi est-elle importante? Mar 20, 2025 pm 04:21 PM

L'article traite de la commande GO FMT dans GO Programming, qui formate le code pour adhérer aux directives de style officiel. Il met en évidence l'importance de GO FMT pour maintenir la cohérence du code, la lisibilité et la réduction des débats de style. Meilleures pratiques pour

Comment spécifier la base de données associée au modèle de Beego ORM? Comment spécifier la base de données associée au modèle de Beego ORM? Apr 02, 2025 pm 03:54 PM

Dans le cadre du cadre de beegoorm, comment spécifier la base de données associée au modèle? De nombreux projets Beego nécessitent que plusieurs bases de données soient opérées simultanément. Lorsque vous utilisez Beego ...

See all articles