Heim >Backend-Entwicklung >Golang >Wie kann ich die Registrierung von Handlern im „net/http'-Paket von Go aufheben?

Wie kann ich die Registrierung von Handlern im „net/http'-Paket von Go aufheben?

DDD
DDDOriginal
2024-11-05 15:08:02558Durchsuche

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

Registrierung von Handlern in net/http aufheben

In net/http können Handler zur Laufzeit registriert und abgemeldet werden. Dies ermöglicht die dynamische Konfiguration von Webservern.

Handler registrieren

Der folgende Code zeigt, wie man einen Handler zur Laufzeit mithilfe einer HandlerFactory registriert:

<code class="go">package main

import (
    "fmt"
    "net/http"
)

type MyHandler struct {
    id int
}

func (hf *MyHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintln(w, r.URL.Path)
}

// Creates MyHandler instances and registers them as handlers at runtime
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, &amp;handler)
}

func main() {
    factory := HandlerFactory{0}
    http.Handle("/create", &amp;factory)
    http.ListenAndServe("localhost:8080", nil)
}</code>

Registrierung von Handlern aufheben

Um die Registrierung eines Handlers aufzuheben, kann ein benutzerdefinierter ServerMux erstellt und verwendet werden. Dieser benutzerdefinierte ServerMux enthält eine Deregister-Methode, die eine Muster-zu-Handler-Zuordnung aus der Karte entfernt:

<code class="go">// TODO: check if registered and return error if not.
// TODO: possibly remove the automatic permanent link between /dir and /dir/.
func (mux *MyMux) Deregister(pattern string) error {
    mux.mu.Lock()
    defer mux.mu.Unlock()
    del(mux.m, pattern)
    return nil
}</code>

Verwendung dieses benutzerdefinierten ServerMux:

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

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

Handler können von diesem benutzerdefinierten ServerMux deregistriert werden kann sicher von einer anderen Goroutine aus erfolgen, ohne die Weiterleitung von Nachrichten durch ListenAndServe() zu beeinträchtigen.

Das obige ist der detaillierte Inhalt vonWie kann ich die Registrierung von Handlern im „net/http'-Paket von Go aufheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn