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

时间:2015-05-05 21:22:14

标签: http go mux

我看过很多帖子谈到在Go中构建自己的MUX,其中一个例子就在这里(http://thenewstack.io/building-a-web-server-in-go/)。

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

1 个答案:

答案 0 :(得分:13)

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

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

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

    哪个很麻烦。

  2. 默认服务器多路复用器不是最快的。

  3. 考虑this benchmark的结论:

      

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

    所以真正唯一的优势就是每个人都已经拥有它,因为它已包含在net/http中。

    最近,我一直朝着避开默认http.Handlehttp.HandleFunc函数并定义明确的http.Handler的方向前进,然后将其移交给{{1} }。 (而不是ListenAndServe

    nil

    较新的开发人员发现handler := http.NewServeMux() handler.Handle("/whatever", ...) http.ListenAndServe(80, handler) http.Handle之间的区别很微妙且令人困惑,因此我认为值得先了解http.HandleFunc概念。多路复用器只是另一种http.Handler(一种将请求路由到其他http.Handler),当你依赖http.Handler时,现实就隐藏了。