1 回答
TA贡献1900条经验 获得超5个赞
内置多路复用器有两个缺点:
如果您需要来自 url 的信息(例如 id in /users/:id),您必须手动执行:
http.HandleFunc("/users/", func(res http.ResponseWriter, req *http.Request) {
id := strings.SplitN(req.URL.Path, "/", 3)[2]
})
这很麻烦。
默认的服务器复用器不是最快的。
考虑这个基准的结论:
首先,没有理由使用net/http的默认ServeMux,它非常有限,并没有特别好的性能。每种口味都有足够的替代品,选择你最喜欢的。
所以它唯一的优势是每个人都已经拥有它,因为它包含在net/http.
最近我一直在朝着避免默认http.Handle和http.HandleFunc函数的方向发展,http.Handler而是定义一个显式,然后将其交给ListenAndServe. (而不是nil:
handler := http.NewServeMux()
handler.Handle("/whatever", ...)
http.ListenAndServe(80, handler)
较新的开发人员发现之间的区别http.Handle和http.HandleFunc微妙和困惑,所以我认为这是值得理解的http.Handler概念了前面。mux 只是另一种http.Handler(将请求路由到其他http.Handlers),当您依赖DefaultServeMux.
- 1 回答
- 0 关注
- 168 浏览
添加回答
举报