Maison > développement back-end > Golang > Comment gérer dynamiquement les gestionnaires de routes HTTP dans Go ?

Comment gérer dynamiquement les gestionnaires de routes HTTP dans Go ?

Linda Hamilton
Libérer: 2024-10-31 17:58:45
original
636 Les gens l'ont consulté

How to Dynamically Manage HTTP Route Handlers in Go?

Gestion dynamique des gestionnaires de routes HTTP dans Go

Lorsque vous travaillez avec des serveurs HTTP dans Go, il peut être avantageux d'avoir la flexibilité de modifier dynamiquement gestionnaires de route sans redémarrer l’application. Cet article fournit une solution à la fois pour le http.ServerMux natif et pour le mux.Router du populaire Gorilla Toolkit.

Traditionnellement, une approche de la gestion des routes consistait à gérer les fonctionnalités désactivées en renvoyant un code d'état 404. Cependant, une solution plus générale consiste à intercepter les requêtes entrantes et à vérifier si la route est actuellement activée.

À cette fin, nous introduisons le type Handlers, une collection de gestionnaires de route avec des indicateurs activés associés. La méthode ServeHTTP gère les requêtes entrantes en vérifiant l'indicateur et en appelant le gestionnaire ou en renvoyant une erreur 404.

La méthode HandleFunc enregistre les routes auprès du multiplexeur sous-jacent et les ajoute à la carte des gestionnaires. Lorsqu'elle est appelée ultérieurement, la méthode garantit que seuls les gestionnaires activés sont exécutés.

<code class="go">package main

import (
    "net/http"
    "sync"
)

type HasHandleFunc interface {
    HandleFunc(pattern string, handler func(w http.ResponseWriter, req *http.Request))
}
type Handler struct {
    http.HandlerFunc
    Enabled bool
}
type Handlers map[string]*Handler

func (h Handlers) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    path := r.URL.Path
    if handler, ok := h[path]; ok && handler.Enabled {
        handler.ServeHTTP(w, r)
    } else {
        http.Error(w, "Not Found", http.StatusNotFound)
    }
}

func (h Handlers) HandleFunc(mux HasHandleFunc, pattern string, handler http.HandlerFunc) {
    h[pattern] = &Handler{handler, true}
    mux.HandleFunc(pattern, h.ServeHTTP)
}

func main() {
    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
        // the route to '/' is now disabled
    })
    http.Handle("/", mux)
    http.ListenAndServe(":9020", nil)
}</code>
Copier après la connexion

Avec cette solution, vous pouvez désactiver ou activer dynamiquement les itinéraires et même configurer des modèles de routage basés sur le temps, répondant au besoin de flexibilité Gestion des routes HTTP dans Go.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal