Maison >développement back-end >Golang >Comment puis-je désinscrire les gestionnaires dans le package « net/http » de Go ?

Comment puis-je désinscrire les gestionnaires dans le package « net/http » de Go ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-05 14:33:021286parcourir

How can I Unregister Handlers in Go's `net/http` Package?

Désinscription des gestionnaires dans net/http

Dans net/http, l'enregistrement d'un gestionnaire associe un modèle d'URL à un gestionnaire HTTP spécifique. Cependant, il peut s'avérer nécessaire de désenregistrer un gestionnaire au moment de l'exécution, de la même manière que pour créer un gestionnaire pour un modèle d'URL.

L'exemple fourni montre la création d'une fabrique de gestionnaires pour créer dynamiquement des gestionnaires pour des URL telles que "/123". /" et enregistrez-les. L'URL "/destroy/123" correspondante est manquante pour désenregistrer le gestionnaire pour "/123/".

Pour implémenter la fonctionnalité de désenregistrement, un ServerMux personnalisé peut être créé en copiant le code du GOROOT. /src/pkg/net/http/server.go. Le ServerMux personnalisé nécessitera une méthode de désinscription. Cela peut être implémenté en verrouillant la carte et en supprimant l'entrée associée au modèle.

<code class="go">func (mux *MyMux) Deregister(pattern string) error {
    mux.mu.Lock()
    defer mux.mu.Unlock()
    del(mux.m, pattern)
    return nil
}</code>

Pour utiliser ce multiplexeur personnalisé, il peut être configuré en tant que gestionnaire pour un serveur HTTP. Modifier le mux en appelant deregister() depuis une autre goroutine est sûr et affectera le routage des messages par ListenAndServe().

<code class="go">mux := newMux()
mux.Handle("/create", &factory)

srv := &http.Server {
    Addr: localhost:8080
    Handler: mux,
}
srv.ListenAndServe()</code>

En implémentant un ServerMux personnalisé avec une méthode de désenregistrement, il devient possible de gérer les gestionnaires dynamiquement et désenregistrez-les au moment de l'exécution.

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