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
Freigeben: 2024-11-05 15:08:02
Original
490 Leute haben es durchsucht

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage