Maison > développement back-end > Golang > Exemples pour expliquer comment utiliser Golang pour implémenter le routage

Exemples pour expliquer comment utiliser Golang pour implémenter le routage

PHPz
Libérer: 2023-04-11 09:22:03
original
1616 Les gens l'ont consulté

Golang est un langage de programmation efficace, concis et performant. Sa principale caractéristique est sa supériorité sur les autres langages en termes de vitesse d'exécution du code. Le routage dans Golang est une partie importante du développement Web et nécessite un routage pour mapper les requêtes au bon gestionnaire. Cet article explique comment utiliser Golang pour implémenter le routage.

1. Créer un serveur HTTP de base
Tout d'abord, nous devons créer un serveur HTTP de base sur l'ordinateur local.

package main

import (
    "fmt"
    "log"
    "net/http"
)

func main() {
    http.HandleFunc("/", hello)
    log.Fatal(http.ListenAndServe(":8080", nil))
}

func hello(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hello, World!")
}
Copier après la connexion

Le code ci-dessus démarre un serveur HTTP à l'aide du package http intégré de Go. Utilisez la fonction http.HandleFunc pour spécifier le gestionnaire auquel envoyer la requête, et utilisez la fonction http.ListenAndServe pour démarrer le serveur sur le port 8080. http包启动了一个HTTP服务器。使用http.HandleFunc函数指定要将请求发送到的处理器,并使用http.ListenAndServe函数在端口8080上启动服务器。

二、添加路由
上面的代码只能处理根路径。现在,我们将添加另一个处理程序来处理其他路径。

package main

import (
    "fmt"
    "log"
    "net/http"
)

func main() {
    http.HandleFunc("/", home)
    http.HandleFunc("/about", about)

    log.Fatal(http.ListenAndServe(":8080", nil))
}

func home(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Home Page")
}

func about(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "About Page")
}
Copier après la connexion

在上面的代码中,我们使用http.HandleFunc函数定义了两个handler函数:homeabout。我们还将它们映射到了路径//about

三、使用第三方库实现路由

在Golang中,还有一些第三方库可以帮助我们实现路由。其中最流行的是mux库。

要使用mux实现路由,我们需要按如下方式修改上面的代码:

package main

import (
    "fmt"
    "log"
    "net/http"

    "github.com/gorilla/mux"
)

func main() {
    router := mux.NewRouter()
    router.HandleFunc("/", home)
    router.HandleFunc("/about", about)

    log.Fatal(http.ListenAndServe(":8080", router))
}

func home(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Home Page")
}

func about(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "About Page")
}
Copier après la connexion

以上代码中,我们使用了gorilla/mux库来处理路由。我们首先创建了一个mux.Router实例。然后,我们定义了两个handler函数,并将它们绑定到与上文相同的路径。

四、添加动态路由

我们还可以将路由设置为动态路径,以便处理类似于/user/10这样的请求。在这种情况下,10就是动态部分,可以根据需要更改。

我们可以使用mux.Vars()函数来提取10这样的值,并使用http.ResponseWriter函数将其发送回客户端。

package main

import (
    "fmt"
    "log"
    "net/http"

    "github.com/gorilla/mux"
)

func main() {
    router := mux.NewRouter()

    router.HandleFunc("/", home)
    router.HandleFunc("/about", about)

    // 添加动态路由
    router.HandleFunc("/user/{id}", func(w http.ResponseWriter, r *http.Request) {
        vars := mux.Vars(r)
        id := vars["id"]
        fmt.Fprintf(w, "User ID: %v", id)
    })

    log.Fatal(http.ListenAndServe(":8080", router))
}

func home(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Home Page")
}

func about(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "About Page")
}
Copier après la connexion

上面的代码将路径/user/{id}映射到匿名函数,该函数提取了“ id”值并将其发送回客户端。

五、路由分组

最后,我们可以将路由分组。这样可以使代码更易于管理,尤其是在具有许多路由的应用程序中。

package main

import (
    "fmt"
    "log"
    "net/http"

    "github.com/gorilla/mux"
)

func main() {
    router := mux.NewRouter()

    // 创建子路由器
    api := router.PathPrefix("/api").Subrouter()
    api.HandleFunc("/", apiHome)
    api.HandleFunc("/user", apiUser)

    // 添加其他路由
    router.HandleFunc("/", home)
    router.HandleFunc("/about", about)

    log.Fatal(http.ListenAndServe(":8080", router))
}

func home(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Home Page")
}

func about(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "About Page")
}

func apiHome(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "API Home Page")
}

func apiUser(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "API User Page")
}
Copier après la connexion

以上代码展示了如何使用Subrouter()创建子路由器并将其映射到路径/api。此外,我们还添加了其他基本路由和处理程序函数。

六、总结

在本文中,我们介绍了Go中路由的实现方法。我们从创建基本HTTP服务器开始,然后使用gorilla/mux

2. Ajouter un routage

Le code ci-dessus ne peut gérer que le chemin racine. Nous allons maintenant ajouter un autre gestionnaire pour gérer d'autres chemins.

rrreee🎜Dans le code ci-dessus, nous utilisons la fonction http.HandleFunc pour définir deux fonctions de gestionnaire : home et about. Nous les avons également mappés sur les chemins / et /about. 🎜🎜3. Utiliser des bibliothèques tierces pour implémenter le routage 🎜🎜Dans Golang, il existe également des bibliothèques tierces qui peuvent nous aider à implémenter le routage. La plus populaire d'entre elles est la bibliothèque mux. 🎜🎜Pour utiliser mux pour implémenter le routage, nous devons modifier le code ci-dessus comme suit : 🎜rrreee🎜Dans le code ci-dessus, nous utilisons la bibliothèque gorilla/mux pour gérer routage. Nous créons d’abord une instance de mux.Router. Nous définissons ensuite deux fonctions de gestionnaire et les lions aux mêmes chemins que ci-dessus. 🎜🎜4. Ajouter un routage dynamique🎜🎜Nous pouvons également définir le routage sur un chemin dynamique pour gérer les requêtes telles que /user/10. Dans ce cas, 10 est la partie dynamique et peut être modifié selon les besoins. 🎜🎜Nous pouvons utiliser la fonction mux.Vars() pour extraire une valeur comme 10 et la renvoyer au client en utilisant le http.ResponseWriter fin de fonction. 🎜rrreee🎜Le code ci-dessus mappe le chemin /user/{id} vers une fonction anonyme qui extrait la valeur "id" et la renvoie au client. 🎜🎜5. Regroupement d'itinéraires🎜🎜Enfin, nous pouvons regrouper les itinéraires. Cela rend le code plus gérable, en particulier dans les applications comportant de nombreuses routes. 🎜rrreee🎜Le code ci-dessus montre comment utiliser Subrouter() pour créer un sous-routeur et le mapper au chemin /api. De plus, nous avons ajouté d’autres fonctions de base de routage et de gestion. 🎜🎜6. Résumé🎜🎜Dans cet article, nous avons présenté la méthode d'implémentation du routage dans Go. Nous commençons par créer un serveur HTTP de base puis optimisons le code à l'aide de la bibliothèque gorilla/mux. Nous avons également montré comment utiliser le routage dynamique, comment regrouper les routes et comment ajouter des gestionnaires aux routes. 🎜🎜La fonction de routage de Golang est puissante et très simple à utiliser. Il aide les développeurs à créer des applications Web efficaces et performantes tout en réduisant le temps de développement et la complexité du code. 🎜

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:php.cn
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