Maison >développement back-end >Golang >Comment puis-je modifier dynamiquement les gestionnaires Mux dans les serveurs HTTP Golang ?

Comment puis-je modifier dynamiquement les gestionnaires Mux dans les serveurs HTTP Golang ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-31 15:21:02297parcourir

How Can I Dynamically Change Mux Handlers in Golang HTTP Servers?

Comment modifier dynamiquement les gestionnaires Mux dans les serveurs HTTP Golang

Dans Go, http.ServeMux et Gorilla's mux.Router fournissent des outils polyvalents pour la gestion Itinéraires HTTP. Cependant, il n'existe aucun mécanisme intégré pour modifier la fonction de gestionnaire associée à une route existante sans redémarrer l'application.

Solutions possibles :

Option 1 : Wrapper de gestionnaire personnalisé avec indicateur d'activation/désactivation

Cette approche implique la création d'un type de gestionnaire personnalisé qui intègre la fonction de gestionnaire réelle et inclut un indicateur activé. Le gestionnaire personnalisé peut ensuite être ajouté au multiplexeur, qui servira le gestionnaire si l'indicateur est défini sur true.

<code class="go">type Handler struct {
    http.HandlerFunc
    Enabled bool
}

type Handlers map[string]*Handler

// Implementation of ServeHTTP that checks if the handler is enabled
func (h Handlers) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    path := r.URL.Path
    if handler, ok := h[path]; ok &amp;&amp; handler.Enabled {
        handler.ServeHTTP(w, r)
    } else {
        http.Error(w, "Not Found", http.StatusNotFound)
    }
}</code>

Ensuite, vous pouvez utiliser ce type de gestionnaire personnalisé avec http.ServeMux ou gorilla/mux pour activer ou désactiver les routes de manière dynamique.

Exemple avec http.ServeMux :

<code class="go">mux := http.NewServeMux()
handlers := Handlers{}

handlers.HandleFunc(mux, "/", func(w http.ResponseWriter, r *http.Request) {
    w.Write([]byte("this will show once"))
    handlers["/"].Enabled = false
})

http.Handle("/", mux)</code>

Option 2 : Middleware avec liste noire d'URL

Vous pouvez également implémenter un middleware qui vérifie l'URL demandée par rapport à une liste de routes désactivées. Si l'URL correspond à une route désactivée, le middleware peut empêcher l'exécution du gestionnaire et renvoyer une réponse personnalisée.

Exemple :

<code class="go">func DisableRouteMiddleware(disabledRoutes []string) func(http.Handler) http.Handler {
    return func(next http.Handler) http.Handler {
        return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
            for _, route := range disabledRoutes {
                if r.URL.Path == route {
                    http.Error(w, "Disabled", http.StatusNotFound)
                    return
                }
            }
            next.ServeHTTP(w, r)
        })
    }
}</code>

Vous pouvez ensuite utiliser ce middleware pour envelopper tous vos gestionnaires avant de les ajouter au multiplexeur.

Les deux approches vous permettent de désactiver ou d'activer dynamiquement des routes dans votre application sans nécessiter de redémarrage. Le choix de l'option à utiliser dépend de vos besoins spécifiques et du niveau de flexibilité dont vous avez besoin.

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
Article précédent:Golang crée un fichier DBArticle suivant:Golang crée un fichier DB