”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 如何取消注册 net/http 包中的处理程序?

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

发布于2024-12-21
浏览:237

How Can I Unregister Handlers in the net/http Package?

在net/http中取消注册处理程序

在net/http中,处理程序可以使用http.Handle动态注册到特定的URL模式功能。但是,默认的多路复用器不提供取消注册处理程序的机制。

取消注册处理程序的一种方法是创建一个扩展标准 http.ServeMux 类型的自定义多路复用器。此自定义多路复用器可以包含用于取消注册处理程序的方法。例如,以下代码定义了一个添加 Deregister 方法的自定义多路复用器:

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
}

定义自定义多路复用器后,就可以使用它来处理请求。例如:

mux := new(MyMux)
mux.Handle("/create", &factory)

srv := &http.Server{
    Addr:    "localhost:8080",
    Handler: mux,
}
srv.ListenAndServe()

在自定义多路复用器上调用 Deregister 方法将停止相应的处理程序为请求提供服务。请注意,必须使用相同的自定义多路复用器实例来注册处理程序才能使取消注册生效。

最新教程 更多>
  • 大批
    大批
    方法是可以在对象上调用的 fns 数组是对象,因此它们在 JS 中也有方法。 slice(begin):将数组的一部分提取到新数组中,而不改变原始数组。 let arr = ['a','b','c','d','e']; // Usecase: Extract till index p...
    编程 发布于2024-12-21
  • 将 Azure SQL 数据库升级到 v12 后,为什么会出现 TLS 握手错误?
    将 Azure SQL 数据库升级到 v12 后,为什么会出现 TLS 握手错误?
    v12 升级后 Azure SQL 数据库 TLS 握手错误Azure SQL 数据库实例升级到 v12 后,您可能会遇到 TLS 握手错误。当服务器提供的证书与客户端连接字符串中指定的主机名不匹配时,就会发生此错误。错误详细信息错误消息通常表明证书对于客户端连接中使用的主机名以外的主机名有效。例如...
    编程 发布于2024-12-21
  • 如何处理 SQL 数据库中多个表的外键关系?
    如何处理 SQL 数据库中多个表的外键关系?
    处理多个表的外键您有三个表:地区、国家和州。国家和国家可以属于地区,形成等级结构。现在,您想要创建一个包含“region_id”和“popular_place_id”列的“popular_areas”表,并基于“popular_place_type”列在“popular_place_id”与国家或州...
    编程 发布于2024-12-21
  • Go 是否为 Goroutine 特定数据提供 ThreadLocal 等效项?
    Go 是否为 Goroutine 特定数据提供 ThreadLocal 等效项?
    了解 Go 中的 Goroutine-本地存储在使用 Go 时,开发者经常会遇到需要跟踪与特定 Goroutine 相关的信息的情况。在 Java 等其他语言中,ThreadLocal 为该任务提供了一个优雅的解决方案。 Go 是否提供类似的机制?Go 的 Goroutine 本地存储方法Go 的标...
    编程 发布于2024-12-21
  • Bootstrap 4 Beta 中的列偏移发生了什么?
    Bootstrap 4 Beta 中的列偏移发生了什么?
    Bootstrap 4 Beta:列偏移的删除和恢复Bootstrap 4 在其 Beta 1 版本中引入了重大更改柱子偏移了。然而,随着 Beta 2 的后续发布,这些变化已经逆转。从 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    编程 发布于2024-12-21
  • 在 Go 中使用 WebSocket 进行实时通信
    在 Go 中使用 WebSocket 进行实时通信
    构建需要实时更新的应用程序(例如聊天应用程序、实时通知或协作工具)需要比传统 HTTP 更快、更具交互性的通信方法。这就是 WebSockets 发挥作用的地方!今天,我们将探讨如何在 Go 中使用 WebSocket,以便您可以向应用程序添加实时功能。 在这篇文章中,我们将介绍: WebSocke...
    编程 发布于2024-12-21
  • 如何使用 Prototype.js 实现自动调整文本区域大小的功能?
    如何使用 Prototype.js 实现自动调整文本区域大小的功能?
    使用 Prototype 实现自动调整大小的 TextArea要增强内部销售应用程序中的用户体验,请考虑向用于送货地址的文本区域。以下是实现此目的的详细指南:目标是创建一个可以动态调整其高度以适应文本输入的文本区域,确保最佳的空间利用率和可读性。为此,我们将利用 JavaScript 框架 Prot...
    编程 发布于2024-12-21
  • Spring Boot如何配置多个数据源?
    Spring Boot如何配置多个数据源?
    在Spring Boot中配置多个数据源在Spring Boot中,使用多个数据源可以让你隔离不同实体的数据访问管理或应用程序。为了实现这一点,使用了 application.properties 文件和 Bean 配置方法。application.properties要添加第二个数据源,请在 ap...
    编程 发布于2024-12-21
  • 为什么 C++ 中的零长度数组会导致错误 2233,如何修复它?
    为什么 C++ 中的零长度数组会导致错误 2233,如何修复它?
    在 C 中处理“零长度数组” 在 C 中,在遗留代码中可能会遇到“零长度数组”的情况。这涉及包含长度为零的数组的结构。虽然警告被编译指示抑制,但创建包含此类数组的新结构可能会导致错误 2233。为什么会发生这种情况,可以采取什么措施来解决它?使用零长度数组的原因是一个历史原因允许动态分配数组的 C ...
    编程 发布于2024-12-21
  • 如何设置 HTML `` 标签的样式并确保其可见性?
    如何设置 HTML `` 标签的样式并确保其可见性?
    HTML标签的样式和可见性问题声明在HTML中,标签用于定义一个区域可以链接到另一个资源的图像。然而,用户在设计样式并使这些区域始终可见方面遇到了困难。jQuery 插件解决方案克服这一挑战的一种方法是利用 MapHilight jQuery 插件。该插件提供了使用 CSS 悬停效果突出显示图像地图...
    编程 发布于2024-12-21
  • 除了“if”语句之外:还有哪些地方可以在不进行强制转换的情况下使用具有显式“bool”转换的类型?
    除了“if”语句之外:还有哪些地方可以在不进行强制转换的情况下使用具有显式“bool”转换的类型?
    无需强制转换即可上下文转换为 bool您的类定义了对 bool 的显式转换,使您能够在条件语句中直接使用其实例“t”。然而,这种显式转换提出了一个问题:“t”在哪里可以在不进行强制转换的情况下用作 bool?上下文转换场景C 标准指定了四种值可以根据上下文转换为的主要场景bool:语句:if、whi...
    编程 发布于2024-12-21
  • 访问类中的数据库对象时如何避免全局变量?
    访问类中的数据库对象时如何避免全局变量?
    在类中使用全局变量创建分页功能涉及从类中访问数据库对象。但是,尝试访问类内部的外部变量可能会导致错误。让我们深入研究处理此问题的可能解决方案。为了解决致命错误“在非对象上调用成员函数 query()”,数据库对象需要在类中可访问。不使用全局变量,更合适的方法是将数据库对象注入到类或其方法中。依赖注入...
    编程 发布于2024-12-21
  • 如何使用 MySQL 查找今天生日的用户?
    如何使用 MySQL 查找今天生日的用户?
    如何使用 MySQL 识别今天生日的用户使用 MySQL 确定今天是否是用户的生日涉及查找生日匹配的所有行今天的日期。这可以通过一个简单的 MySQL 查询来实现,该查询将存储为 UNIX 时间戳的生日与今天的日期进行比较。以下 SQL 查询将获取今天有生日的所有用户: FROM USERS ...
    编程 发布于2024-12-21
  • 如何在C++中生成特定范围内均匀分布的随机数?
    如何在C++中生成特定范围内均匀分布的随机数?
    跨范围均匀随机数生成您寻求一种在指定范围[min, max]内均匀生成随机数的方法。 rand 的缺陷您当前使用 rand() 和模运算符的实现可能无法确保均匀分布,因为它的行为取决于 RAND_MAX 和范围本身。C 11 和统一范围生成在 C 11 中,std::uniform_int_dist...
    编程 发布于2024-12-21
  • 如何在 Jackson 序列化期间抑制空字段值?
    如何在 Jackson 序列化期间抑制空字段值?
    处理 Jackson 序列化中的空字段值Jackson 是一个流行的 Java 序列化库,提供了各种配置选项来定制其序列化行为。一种常见的情况是抑制空字段值的序列化。这可确保序列化输出中仅包含非空属性。配置 Jackson 进行空值抑制指示 Jackson 忽略 null 有两种主要方法序列化期间的...
    编程 发布于2024-12-21

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3