首页 >后端开发 >Golang >如何在 Go 的 net/http 包中取消注册处理程序?

如何在 Go 的 net/http 包中取消注册处理程序?

Susan Sarandon
Susan Sarandon原创
2024-11-05 14:33:021019浏览

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

取消注册 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn