Maison >développement back-end >Golang >Comment puis-je utiliser des expressions régulières pour le routage d'URL dans « http.HandleFunc() » de Go ?

Comment puis-je utiliser des expressions régulières pour le routage d'URL dans « http.HandleFunc() » de Go ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-27 22:18:11232parcourir

How Can I Use Regular Expressions for URL Routing in Go's `http.HandleFunc()`?

Utilisation d'expressions régulières dans la gestion des URL dans Golang

Dans Golang, la méthode http.HandleFunc() vous permet d'enregistrer des modèles d'URL pour HTTP traitement des demandes. Toutefois, cette méthode ne prend pas en charge l’utilisation d’expressions régulières pour la correspondance de modèles. Cela soulève la question de savoir comment utiliser les expressions régulières pour déterminer le traitement de fonction approprié en fonction du modèle d'URL.

Le http.HandleFunc() de la bibliothèque standard ne prend pas en charge les expressions régulières pour la correspondance d'URL. Au lieu de cela, il ne peut correspondre qu'à des chemins fixes et enracinés (par exemple, "/favicon.ico") ou à des sous-arbres enracinés (par exemple, "/images/"). Bien que les modèles plus longs soient prioritaires sur les plus courts, les options sont limitées.

Pour surmonter cette limitation et utiliser des expressions régulières pour les modèles d'URL, vous pouvez remplacer le modèle d'URL racine par un modèle plus générique. Dans la fonction de gestionnaire, vous pouvez ensuite effectuer d'autres correspondances d'expressions régulières et un routage en fonction du chemin d'URL spécifique.

Utiliser Regexp pour acheminer les requêtes

Le code suivant montre comment pour utiliser des expressions régulières pour le routage d'URL :

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

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

var rNum = regexp.MustCompile(`\d`)  // Has digit(s)
var rAbc = regexp.MustCompile(`abc`) // Contains "abc"

func route(w http.ResponseWriter, r *http.Request) {
    switch {
    case rNum.MatchString(r.URL.Path):
        digits(w, r)
    case rAbc.MatchString(r.URL.Path):
        abc(w, r)
    default:
        w.Write([]byte("Unknown Pattern"))
    }
}

func digits(w http.ResponseWriter, r *http.Request) {
    w.Write([]byte("Has digits"))
}

func abc(w http.ResponseWriter, r *http.Request) {
    w.Write([]byte("Has abc"))
}

Dans cet exemple, la fonction principale enregistre l'URL racine ("/") en tant que modèle générique. Dans la fonction route(), elle utilise des expressions régulières (rNum et rAbc) pour faire correspondre deux modèles d'URL spécifiques : les chemins avec au moins un chiffre (par exemple, "/123") et les chemins contenant la chaîne "abc" (par exemple, "/ abde"). Si une requête correspond à l'un ou l'autre modèle, la fonction appropriée (par exemple, digits() ou abc()) est exécutée. Sinon, un message par défaut s'affiche.

Approches alternatives

En plus de l'approche ci-dessus, vous pouvez également utiliser des bibliothèques externes comme Gorilla MUX, qui offre une approche plus flexible mécanisme de routage avec prise en charge des expressions régulières.

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