取消注册 net/http 中的处理程序
在 net/http 中,注册处理程序会将 URL 模式与特定的 HTTP 处理程序相关联。但是,可能需要在运行时取消注册处理程序,类似于为 URL 模式创建处理程序。
提供的示例演示了如何创建处理程序工厂,以便为“/123”等 URL 动态创建处理程序/”并注册它们。缺少相应的“/destroy/123” URL,无法注销“/123/”的处理程序。
要实现注销功能,可以通过从 GOROOT 复制代码来创建自定义 ServerMux /src/pkg/net/http/server.go。自定义 ServerMux 将需要一种注销方法。这可以通过锁定映射并删除与模式关联的条目来实现。
<code class="go">func (mux *MyMux) Deregister(pattern string) error { mux.mu.Lock() defer mux.mu.Unlock() del(mux.m, pattern) return nil }</code>
要使用此自定义多路复用器,可以将其配置为 HTTP 服务器的处理程序。通过从另一个 goroutine 调用 deregister() 来修改 mux 是安全的,并且会影响 ListenAndServe() 的消息路由。
<code class="go">mux := newMux() mux.Handle("/create", &factory) srv := &http.Server { Addr: localhost:8080 Handler: mux, } srv.ListenAndServe()</code>
通过使用取消注册方法实现自定义 ServerMux,可以管理处理程序动态地并在运行时取消注册它们。
以上是如何在 Go 的 net/http 包中取消注册处理程序?的详细内容。更多信息请关注PHP中文网其他相关文章!