15

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

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

这让我想知道:为什么要http.HandleFunc在有 a 时使用ServeMux?我知道 ServeMux 有一些优势(例如,您可以嵌套它而无需一直重复前缀)但我想知道为什么我应该选择http.HandleFuncMultiplexer,尤其是因为在内部HandleFunc使用 a ServeMux

编辑:正如评论中所承诺的,我已经要求弃用Golang-dev上的附加(和无用的 IMO 功能) ,他们说不(好吧,有人说不)。链接在这里。

4

1 回答 1

9

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

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

http.Handle|HandleFunc是方便的方法,并且对于保持示例代码中的样板文件可能很有用,但是创建 ServeMux 使您能够包装它、将它嵌套在另一个中、从构造函数中导出它等。

于 2016-03-27T15:24:23.643 回答