我想知道是否应该创建一个新的 ServeMux 并将其注册到 http.Server
或者我应该调用 http.HandleFunc
和 http.Handler
直接?
我认为带有 ServeMux 的路由更好,因为 http.HandleFunc
显然会与 HTTP 包的全局状态混淆,这在 Go 中被认为是不好的做法。然而,在很多教程中,甚至是官方教程中,我经常看到 http.HandleFunc
路由被使用。
这让我想知道:当有 ServeMux
时,为什么还要使用 http.HandleFunc
?我知道 ServeMux 有一些优点(例如,您可以嵌套它而无需一直重复前缀)但我想知道为什么我应该选择 http.HandleFunc
而不是 Multiplexer,尤其是因为 HandleFunc
在内部使用 ServeMux
。
编辑:正如评论中所 promise 的,我已要求弃用 Golang-dev 上的附加(和无用的 IMO 功能)他们说不(好吧,有人说不)。 Here is the link.
最佳答案
您走在正确的轨道上:您应该更喜欢实例化自己的 ServeMux
,原因您已概述。
使用 DefaultServeMux
在使用 net/http/pprof
时也存在暴露分析端点的风险,因为它们附加到 DefaultServeMux。
http.Handle|HandleFunc
是方便的方法,可能对保持示例代码中的样板文件很有用,但是创建 ServeMux 使您能够包装它、将其嵌套在另一个中、导出它来自构造函数等。
关于http - 我应该在 golang 中直接使用 ServeMux 还是 http,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36248946/