在 net/http 中注销处理程序
在 net/http 中,可以使用 http.Handle 将处理程序动态注册到特定的 URL 模式功能。但是,默认的多路复用器不提供取消注册处理程序的机制。
取消注册处理程序的一种方法是创建一个扩展标准 http.ServeMux 类型的自定义多路复用器。此自定义多路复用器可以包含用于取消注册处理程序的方法。例如,以下代码定义了一个添加 Deregister 方法的自定义多路复用器:
<code class="go">type MyMux struct { *http.ServeMux mu sync.Mutex // Guards the m map m map[string]http.Handler } func (mux *MyMux) Deregister(pattern string) error { mux.mu.Lock() defer mux.mu.Unlock() if _, ok := mux.m[pattern]; !ok { return errors.New("handler not registered") } delete(mux.m, pattern) return nil }</code>
定义自定义多路复用器后,它可以用于处理请求。例如:
<code class="go">mux := new(MyMux) mux.Handle("/create", &factory) srv := &http.Server{ Addr: "localhost:8080", Handler: mux, } srv.ListenAndServe()</code>
在自定义多路复用器上调用 Deregister 方法将停止相应的处理程序为请求提供服务。请注意,必须使用相同的自定义多路复用器实例来注册处理程序才能使取消注册生效。
以上是如何取消注册 net/http 包中的处理程序?的详细内容。更多信息请关注PHP中文网其他相关文章!