http - 我应该在 golang 中直接使用 ServeMux 还是 http

标签 http go mux

我想知道是否应该创建一个新的 ServeMux 并将其注册到 http.Server 或者我应该调用 http.HandleFunchttp.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/

相关文章:

javascript - 从 nodejs 以 html 格式共享文件

javascript - 无法使用 Node 请求模块进行基本的 HTTP 身份验证

rest - gorilla /多路复用器请求与网址格式不匹配

postgresql - 使用 SQLX 转到可选字段

go - 带 gorilla 复用器的速率限制器

angular - 在 Angular 4/Express 中访问响应状态代码

php - 如何使用 mockbin API 正确创建一个 bin?

go - 如何获取程序的所有依赖文件

http - 在 HTTP 路由器中将未知的 URL 路径设置为错误

arrays - 从 slice 中删除元素不起作用