首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >何时使用Golang的默认MUX而不是使用自己的MUX

何时使用Golang的默认MUX而不是使用自己的MUX
EN

Stack Overflow用户
提问于 2015-05-06 05:22:14
回答 1查看 13.4K关注 0票数 13

我已经看到很多关于在Go中构建自己的多路复用器的帖子,许多例子之一就在这里(http://thenewstack.io/building-a-web-server-in-go/)。

什么时候应该使用默认值,而不是定义自己的呢?Go文档和博客文章都没有说明为什么你应该使用一个而不是另一个。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-06 05:53:43

内置多路复用器有两个缺点:

  1. 如果您需要url中的信息(例如/users/:id中的id ),则必须手动执行此操作:

http.HandleFunc("/users/",func(res http.ResponseWriter,req *http.Request) { id := strings.SplitN(req.URL.Path,"/",3)2 })

哪个是cumbersome.

  • The默认服务器多路复用器不是最快的。

考虑来自this benchmark的结论

首先,没有理由使用net/http的默认ServeMux,它是非常有限的,并且没有特别好的性能。每种口味都有足够的选择,选择你最喜欢的吧。

所以它的唯一优点是每个人都已经有了它,因为它包含在net/http中。

最近,我一直在朝着避免默认的http.Handlehttp.HandleFunc函数的方向前进,而是定义一个显式的http.Handler,然后将其交给ListenAndServe。(不是nil

代码语言:javascript
复制
handler := http.NewServeMux()
handler.Handle("/whatever", ...)
http.ListenAndServe(80, handler)

新入门的开发人员发现http.Handlehttp.HandleFunc之间的区别微妙且令人困惑,所以我认为有必要提前了解http.Handler概念。mux只是另一种http.Handler (将请求路由到其他http.Handler),当您依赖DefaultServeMux时,这一事实被隐藏起来。

票数 26
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30063442

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档