我想知道我是否应该创建一个新的ServeMux并将其注册到http.Server
,还是应该直接调用http.HandleFunc
和http.Handler
?
我认为使用ServeMux的路由更好,因为http.HandleFunc
显然会混淆HTTP包的全局状态,这在Go中被认为是不好的做法。但是,在许多教程中,即使是官方教程,我经常会看到正在使用的http.HandleFunc
路由。
这让我想知道:为什么在有http.HandleFunc
时应该使用ServeMux
?我知道ServeMux有一些优点(例如你可以嵌套它而不必一直重复前缀)但我想知道为什么我应该选择http.HandleFunc
而不是多路复用器,特别是因为HandleFunc
使用ServeMux
内部。
编辑:正如评论中所承诺的那样,我已经要求在Golang-dev上弃用额外的(和无用的IMO功能),他们说没有(好吧,有人说没有)。 Here is the link.
答案 0 :(得分:6)
您正走在正确的轨道上:出于您已概述的原因,您应该更愿意实例化您自己的ServeMux
。
使用DefaultServeMux
时,使用net/http/pprof
时也存在暴露分析端点的风险,因为这些端点附加到DefaultServeMux。
http.Handle|HandleFunc
是方便的方法,也许对于保持示例代码中的样板代码很有用,但创建ServeMux使您能够将其包装,将其嵌套在另一个中,从构造函数中导出等等。 / p>