In net/http erfordert der Umgang mit zur Laufzeit registrierten Handlern einen benutzerdefinierten Ansatz. Während der HTTP-Server einen Mechanismus zum Registrieren von Handlern bereitstellt, fehlt ihm die Möglichkeit, die Registrierung dynamisch aufzuheben.
Um Handler dynamisch zu erstellen und zu registrieren, können Sie eine benutzerdefinierte HandlerFactory verwenden. Dies kann so gestaltet werden, dass neue Handler mit eindeutigen IDs generiert und mithilfe von http.Handle registriert werden. Beispielsweise könnte ein „/create“-Handler MyHandler-Instanzen mit steigenden IDs generieren und sie bestimmten URL-Mustern zuordnen.
<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>
Um nicht registrierte Handler bereitzustellen, benötigen Sie um einen benutzerdefinierten ServerMux zu erstellen, der den ursprünglichen ServeMux erweitert und eine Deregistrierungsmethode enthält.
<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>
Um diesen benutzerdefinierten ServerMux zu verwenden, können Sie einen neuen instanziieren und umschließen es innerhalb eines HTTP-Servers mit 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>
Mit diesem Ansatz können Sie Handler dynamisch registrieren und die Registrierung aufheben und so die Flexibilität bieten, die für die Verarbeitung von zur Laufzeit generierten URL-Mustern erforderlich ist.
Das obige ist der detaillierte Inhalt vonWie können Sie HTTP-Handler im net/http-Paket von Go dynamisch registrieren und die Registrierung aufheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!