为了账号安全,请及时绑定邮箱和手机立即绑定

何时使用 Golang 的默认 MUX 与自己做

何时使用 Golang 的默认 MUX 与自己做

Go
小唯快跑啊 2021-10-04 16:10:19
我看过很多关于在 Go 中构建自己的 MUX 的帖子,这里是众多示例之一(http://thenewstack.io/building-a-web-server-in-go/)。什么时候应该使用默认值而不是定义自己的?Go 文档和博客文章都没有说明为什么应该使用一个而不是另一个。
查看完整描述

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.


查看完整回答
反对 回复 2021-10-04
  • 1 回答
  • 0 关注
  • 168 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信