Http 何时使用Golang';s默认多路复用器与您自己做
我看到很多帖子都在谈论如何在Go中构建自己的MUX,其中一个例子就是这里()Http 何时使用Golang';s默认多路复用器与您自己做,http,go,mux,Http,Go,Mux,我看到很多帖子都在谈论如何在Go中构建自己的MUX,其中一个例子就是这里() 什么时候应该使用默认值,而不是定义自己的?Go文档和博客文章都没有说明为什么应该使用一个而不是另一个。内置mux有两个缺点: 如果您需要url中的信息(例如/users/:id)您必须手动执行: http.HandleFunc("/users/", func(res http.ResponseWriter, req *http.Request) { id := strings.SplitN(req.URL.Pa
什么时候应该使用默认值,而不是定义自己的?Go文档和博客文章都没有说明为什么应该使用一个而不是另一个。内置mux有两个缺点:
/users/:id
)您必须手动执行:
http.HandleFunc("/users/", func(res http.ResponseWriter, req *http.Request) {
id := strings.SplitN(req.URL.Path, "/", 3)[2]
})
这很麻烦net/http
中
最近,我一直在避免使用默认的http.Handle
和http.HandleFunc
函数,而是定义一个显式的http.Handle
,然后将其交给listenandservice
。(而不是nil
:
handler := http.NewServeMux()
handler.Handle("/whatever", ...)
http.ListenAndServe(80, handler)
较新的开发人员发现
http.Handle
和http.HandleFunc
之间的区别微妙而令人困惑,因此我认为有必要先了解http.Handler
的概念。mux只是另一种http.Handler
(将请求路由到其他http.Handler
的一种)当你依赖DefaultServeMux
时,这种现实就被隐藏了起来。有很多路由器/多工器可供使用。内置的net/http
一个是功能性的,像gorilla/mux
这样的路由器/多工器有很多功能可供选择。httprouter
坐在纤细的一端。我认为,如果你不得不问这个问题,几乎不存在(但永远不要说永远!)写自己的问题。路由器只是响应时间饼图中的一小部分。有很多共识是:“路由器只是响应时间饼图中的一小部分。”首先,以最简单的方式完成某些工作。在req.URL.Path上没有“SplitN”方法。而是使用:strings.SplitN(。。。