我应该在 golang 中直接使用 ServeMux 还是 http

Should I use ServeMux or http directly in golang

我想知道我是应该创建一个新的 ServeMux 并将其注册到 http.Server 还是应该直接调用 http.HandleFunchttp.Handler

我认为使用 ServeMux 的路由更好,因为 http.HandleFunc 显然会扰乱 HTTP 包的全局状态,这在 Go 中被认为是不好的做法。然而,在许多教程中,甚至是官方教程中,我经常看到 http.HandleFunc 路由被使用。

这让我很疑惑:既然有ServeMux,为什么还要用http.HandleFunc呢?我知道 ServeMux 有一些优点(例如,你可以嵌套它而不必一直重复前缀)但我想知道为什么我应该选择 http.HandleFunc 而不是 Multiplexer,特别是因为 HandleFunc 使用 ServeMux 内部。

编辑:正如评论中所承诺的那样,我已要求弃用 Golang-dev and they said no (well, on person said no). Here is the link.

上的附加(和无用的 IMO 功能)

您走在正确的轨道上:出于您概述的原因,您应该更愿意实例化您自己的 ServeMux

使用 DefaultServeMux 在使用 net/http/pprof 时也存在暴露分析端点的风险,因为它们附加到 DefaultServeMux。

http.Handle|HandleFunc 是方便的方法,可能有助于减少示例代码中的样板代码,但创建 ServeMux 使您能够包装它、将它嵌套在另一个方法中、从构造函数中导出它等.