Maison >développement back-end >Golang >Comment puis-je utiliser des expressions régulières pour un routage d'URL flexible dans Go ?

Comment puis-je utiliser des expressions régulières pour un routage d'URL flexible dans Go ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-26 20:45:15227parcourir

How Can I Use Regular Expressions for Flexible URL Routing in Go?

Utilisation d'expressions régulières pour mapper des URL dans Go

Dans Go, l'utilisation d'expressions régulières pour faire correspondre les URL permet un routage d'URL plus flexible et plus expressif. Cependant, s'appuyer sur la fonction http.HandleFunc() à cette fin n'est pas idéal.

La fonction http.HandleFunc() est principalement destinée à faire correspondre des chemins fixes ou des sous-arbres enracinés. Il ne prend pas en charge l'utilisation d'expressions régulières. Pour y parvenir, vous devez enregistrer un gestionnaire dans un sous-arbre racine (par exemple, /), puis implémenter une correspondance et un routage d'expressions régulières personnalisés au sein du gestionnaire.

Considérez l'exemple suivant :

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

var rNum = regexp.MustCompile(`\d`)  // Matches URLs with digits
var rAbc = regexp.MustCompile(`abc`) // Matches URLs containing "abc"

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

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

Ce code :

  1. Enregistre un gestionnaire avec la fonction http.HandleFunc() pour correspondre à l'URL racine (/).
  2. Utilise des objets d'expression régulière (rNum et rAbc) pour faire correspondre des modèles d'URL spécifiques dans la fonction de gestionnaire (route).
  3. Appelle différentes fonctions (chiffres ou abc) en fonction de la correspondance modèle.

Vous pouvez également utiliser des bibliothèques externes telles que Gorilla MUX pour obtenir un routage d'URL plus avancé et plus polyvalent. capacités.

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