Maison >développement back-end >Golang >Comment puis-je faire correspondre les caractères génériques dans les modèles d'URL pour les gestionnaires HTTP ?

Comment puis-je faire correspondre les caractères génériques dans les modèles d'URL pour les gestionnaires HTTP ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-12 19:38:02402parcourir

How Can I Match Wildcards in URL Patterns for HTTP Handlers?

Spécification des caractères génériques dans les modèles pour les gestionnaires HTTP

Lors de la création de gestionnaires à l'aide de http.Handler ou http.HandleFunc, vous souhaiterez peut-être spécifier des caractères génériques dans le modèle pour correspondre à une plage d’URL. Malheureusement, les modèles de ces fonctions ne sont pas des expressions régulières et ne prennent pas en charge les caractères génériques par défaut.

Au lieu de cela, vous pouvez créer votre propre gestionnaire personnalisé qui prend en charge la correspondance de modèles à l'aide d'expressions régulières ou de tout autre modèle souhaité. Voici un exemple utilisant des expressions régulières :

import (
    "net/http"
    "regexp"
)

type route struct {
    pattern *regexp.Regexp
    handler http.Handler
}

type RegexpHandler struct {
    routes []*route
}

func (h *RegexpHandler) Handler(pattern *regexp.Regexp, handler http.Handler) {
    h.routes = append(h.routes, &route{pattern, handler})
}

func (h *RegexpHandler) HandleFunc(pattern *regexp.Regexp, handler func(http.ResponseWriter, *http.Request)) {
    h.routes = append(h.routes, &route{pattern, http.HandlerFunc(handler)})
}

func (h *RegexpHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    for _, route := range h.routes {
        if route.pattern.MatchString(r.URL.Path) {
            route.handler.ServeHTTP(w, r)
            return
        }
    }
    // No pattern matched; send 404 response
    http.NotFound(w, r)
}

En implémentant votre propre gestionnaire personnalisé, vous bénéficiez de la flexibilité nécessaire pour définir votre propre logique de correspondance de modèles et gérer différents types d'URL selon vos besoins.

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