我应该在golang

时间:2016-03-27 15:12:59

标签: http go mux

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

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

这让我想知道:为什么在有http.HandleFunc时应该使用ServeMux?我知道ServeMux有一些优点(例如你可以嵌套它而不必一直重复前缀)但我想知道为什么我应该选择http.HandleFunc而不是多路复用器,特别是因为HandleFunc使用ServeMux内部。

编辑:正如评论中所承诺的那样,我已经要求在Golang-dev上弃用额外的(和无用的IMO功能),他们说没有(好吧,有人说没有)。 Here is the link.

1 个答案:

答案 0 :(得分:6)

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

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

http.Handle|HandleFunc是方便的方法,也许对于保持示例代码中的样板代码很有用,但创建ServeMux使您能够将其包装,将其嵌套在另一个中,从构造函数中导出等等。 / p>

相关问题