Heim  >  Artikel  >  Backend-Entwicklung  >  Wie melde ich HTTP-Handler im Netz/http von Go ab?

Wie melde ich HTTP-Handler im Netz/http von Go ab?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-05 17:01:02829Durchsuche

How to Deregister HTTP Handlers in Go's net/http?

Aufhebung der Registrierung in net/http behandeln

HTTP-Handler in net/http können dynamisch registriert und abgemeldet werden, um Flexibilität bei der Bearbeitung von Anfragen zu bieten. Um die Registrierung eines Handlers aufzuheben, kann ein benutzerdefinierter ServerMux erstellt werden.

Implementieren eines benutzerdefinierten ServerMux

Kopieren Sie den Code für ServerMux aus dem Go-Quellcode (GOROOT/src/pkg /net/http/server.go, Zeilen 837-939). Fügen Sie dem benutzerdefinierten ServerMux eine Deregister-Methode hinzu, um Handler aus der Muster-zu-Handler-Zuordnung zu entfernen:

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

Verwendung

Erstellen Sie eine Instanz des benutzerdefinierten ServerMux und Behandeln Sie die Route „/create“ wie gewohnt:

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

Legen Sie den benutzerdefinierten ServerMux als Handler für einen HTTP-Server fest:

<code class="go">srv := &http.Server {
    Addr: localhost:8080
    Handler: mux,
}</code>

Registrierung aufheben

Um die Registrierung eines Handlers aufzuheben, rufen Sie einfach die Deregister-Methode auf dem ServerMux auf:

<code class="go">mux.Deregister("/123/*")</code>

Dadurch wird das Routing-Verhalten des Servers geändert und nachfolgende Anfragen an „/123/*“ werden nicht mehr gesendet Wird vom zuvor registrierten Handler verarbeitet.

Sichere Änderungen

Das Ändern des ServerMux durch Aufrufen von deregister() aus einer anderen Goroutine ist sicher und aktualisiert die Routing-Logik für den Server.

Das obige ist der detaillierte Inhalt vonWie melde ich HTTP-Handler im Netz/http von Go ab?. 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