我已经看到很多关于在Go中构建自己的多路复用器的帖子,许多例子之一就在这里(http://thenewstack.io/building-a-web-server-in-go/)。
什么时候应该使用默认值,而不是定义自己的呢?Go文档和博客文章都没有说明为什么你应该使用一个而不是另一个。
发布于 2015-05-06 05:53:43
内置多路复用器有两个缺点:
/users/:id中的id ),则必须手动执行此操作:http.HandleFunc("/users/",func(res http.ResponseWriter,req *http.Request) { id := strings.SplitN(req.URL.Path,"/",3)2 })
哪个是cumbersome.
考虑来自this benchmark的结论
首先,没有理由使用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.Handler),当您依赖DefaultServeMux时,这一事实被隐藏起来。
https://stackoverflow.com/questions/30063442
复制相似问题