Maison > Article > développement back-end > implémentation du routage feuille golang
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") }
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) })
在这个例子中,我们定义了一个 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) }) })
在上面的例子中,我们使用 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 })
在这个例子中,我们定义了一个中间件,函数体内的代码将在请求通过路由规则匹配之前执行。在中间件中,我们可以通过调用 c.Next()
来执行下一个中间件或路由规则中的匿名函数。执行完匿名函数后,将回到当前中间件中执行后续代码。
当然,Leaf 也支持链式调用多个中间件,可以通过 AppendMiddleware
方法添加多个中间件,例如:
r.AppendMiddleware(A) r.AppendMiddleware(B) r.AppendMiddleware(C)
以上例子中,我们通过 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") }
在这个例子中,我们定义了一个 UserController
控制器,并在其中实现了 GetUser
、CreateUser
、UpdateUser
和 DeleteUser
四个方法,分别用于处理 GET、POST、PUT 和 DELETE 请求。在路由组中,我们将这些方法与对应的请求进行了映射,并指定了路由规则的前缀为 /api/v1
: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) // 响应字符串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 fonctionGroup
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!