这有什么区别:
func main() {
http.HandleFunc("/page2", Page2)
http.HandleFunc("/", Index)
http.ListenAndServe(":3000", nil)
}
Run Code Online (Sandbox Code Playgroud)
并使用golang服务多路复用器
func main() {
mux := http.NewServeMux()
mux.HandleFunc("/page2", Page2)
mux.HandleFunc("/", Index)
http.ListenAndServe(":3000", mux)
}
Run Code Online (Sandbox Code Playgroud)
Cer*_*món 30
第一个程序使用默认的服务多路复用器.它与更详细的相同:
func main() {
http.DefaultServeMux.HandleFunc("/page2", Page2)
http.DefaultServeMux.HandleFunc("/", Index)
http.ListenAndServe(":3000", http.DefaultServeMux)
}
Run Code Online (Sandbox Code Playgroud)
这两个程序之间有一个重要区别:第一个程序无法完全控制程序中使用的处理程序.有些软件包会自动从init()
函数中注册默认的服务器mux (示例).如果程序直接或间接导入其中一个包,则这些处理程序注册的处理程序将在第一个程序中处于活动状态.
第二个程序完全控制与服务器一起使用的处理程序.使用默认服务mux注册的任何处理程序都将被忽略.
默认多路复用器定义如下:
var DefaultServeMux = NewServeMux()
Run Code Online (Sandbox Code Playgroud)
因此,实际上没有什么重大区别,除非您想进一步定制并需要一个显式的多路复用器(例如出于某种原因链接它们)。
但由于默认值已分配,因此无需无缘无故地创建另一个默认值。
ServerMux
是一种实现接口的类型Handler
,所有服务器都有一个。在第一个示例中,服务器仅使用默认处理程序。我认为这里没有差异,因为返回的多路复用器NewServeMux
将与默认值相同。提供它以便您可以进一步自定义请求处理。
归档时间: |
|
查看次数: |
8613 次 |
最近记录: |