Maison > Article > développement back-end > Comment pouvez-vous enregistrer et désenregistrer dynamiquement les gestionnaires HTTP dans le package net/http de Go ?
Dans net/http, la gestion des gestionnaires enregistrés au moment de l'exécution nécessite une approche personnalisée. Bien que le serveur HTTP fournisse un mécanisme d'enregistrement des gestionnaires, il n'a pas la possibilité de les désenregistrer dynamiquement.
Pour créer et enregistrer des gestionnaires de manière dynamique, vous pouvez utiliser une HandlerFactory personnalisée. Cela peut être conçu pour générer de nouveaux gestionnaires avec des identifiants uniques et les enregistrer à l'aide de http.Handle. Par exemple, un gestionnaire "/create" pourrait générer des instances MyHandler avec des ID croissants et les mapper à des modèles d'URL spécifiques.
<code class="go">type HandlerFactory struct { handler_id int } func (hf *HandlerFactory) ServeHTTP(w http.ResponseWriter, r *http.Request) { hf.handler_id++ handler := MyHandler{hf.handler_id} handle := fmt.Sprintf("/%d/", hf.handler_id) http.Handle(handle, &handler) }</code>
Pour fournir des gestionnaires non enregistrés, vous aurez besoin pour créer un ServerMux personnalisé qui étend le ServeMux d'origine et inclut une méthode de désenregistrement.
<code class="go">type MyMux struct { http.ServeMux mu sync.Mutex } func (mux *MyMux) Deregister(pattern string) error { mux.mu.Lock() defer mux.mu.Unlock() del(mux.m, pattern) // Handle additional error checking or setup here }</code>
Pour utiliser ce ServerMux personnalisé, vous pouvez en instancier un nouveau et en envelopper dans un serveur HTTP à l'aide de http.Handler :
<code class="go">mux := new(MyMux) mux.Handle("/create", &factory) srv := &http.Server{ Addr: "localhost:8080", Handler: mux, } go srv.ListenAndServe() // Deregister handlers as needed mux.Deregister("/123/*")</code>
Cette approche vous permet d'enregistrer et de désenregistrer dynamiquement les gestionnaires, offrant ainsi la flexibilité nécessaire à la gestion des modèles d'URL générés par 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!