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

Mat*_*o12 13 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函数),他们说没有(好吧,有人说没有).链接在这里.

eli*_*rar 7

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

使用时DefaultServeMux还会冒使用分析端点的风险net/http/pprof,因为它们附加到DefaultServeMux.

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