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

Susan Sarandon
Release: 2024-11-05 14:33:02
Original
938 people have browsed it

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

Unregistering Handlers in net/http

In net/http, registering a handler associates a URL pattern with a specific HTTP handler. However, there may be a need to unregister a handler at runtime, similar to creating a handler for a URL pattern.

The example provided demonstrates the creation of a handler factory to dynamically create handlers for URLs like "/123/" and register them. The corresponding "/destroy/123" URL is missing to unregister the handler for "/123/".

To implement the unregister functionality, a custom ServerMux can be created by copying the code from the GOROOT/src/pkg/net/http/server.go. The custom ServerMux will require a method for deregistration. This can be implemented by locking the map and deleting the entry associated with the pattern.

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

To use this custom mux, it can be configured as the Handler for an HTTP server. Modifying the mux by calling deregister() from another goroutine is safe and will affect the routing of messages by ListenAndServe().

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

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

By implementing a custom ServerMux with a deregistration method, it becomes possible to manage handlers dynamically and unregister them at runtime.

The above is the detailed content of How can I Unregister Handlers in Go's `net/http` Package?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!