我应该在 golang 中直接使用 ServeMux 还是 http
Should I use ServeMux or http directly in golang
我想知道我是应该创建一个新的 ServeMux 并将其注册到 http.Server
还是应该直接调用 http.HandleFunc
和 http.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 使您能够包装它、将它嵌套在另一个方法中、从构造函数中导出它等.
我想知道我是应该创建一个新的 ServeMux 并将其注册到 http.Server
还是应该直接调用 http.HandleFunc
和 http.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 使您能够包装它、将它嵌套在另一个方法中、从构造函数中导出它等.