这两者有什么不同:
func main() {
http.HandleFunc("/page2", Page2)
http.HandleFunc("/", Index)
http.ListenAndServe(":3000", nil)
}并使用golang服务多路复用器
func main() {
mux := http.NewServeMux()
mux.HandleFunc("/page2", Page2)
mux.HandleFunc("/", Index)
http.ListenAndServe(":3000", mux)
}发布于 2016-04-29 01:27:42
func main() {
http.DefaultServeMux.HandleFunc("/page2", Page2)
http.DefaultServeMux.HandleFunc("/", Index)
http.ListenAndServe(":3000", http.DefaultServeMux)
}这两个程序之间有一个重要的区别:第一个程序不能完全控制程序中使用的处理程序。有一些包可以自动注册到init() functions (example)中的默认服务多路复用。如果程序直接或间接导入其中一个包,则由这些处理程序注册的处理程序将在第一个程序中处于活动状态。
第二个程序完全控制服务器使用的处理程序。使用默认服务多路复用器注册的任何处理程序都将被忽略。
发布于 2016-04-29 01:21:10
var DefaultServeMux = NewServeMux()所以实际上没有什么大的区别,除非你想进一步定制并且需要一个显式的多路复用(例如,出于某种原因将它们链接起来)。
但是,由于默认值已经分配,因此没有必要无缘无故地创建另一个。
发布于 2016-04-29 01:16:21
ServerMux是一种实现Handler接口的类型,所有服务器都有一个。在您的第一个示例中,服务器仅使用默认处理程序。我不认为这里有什么不同,因为NewServeMux返回的多路复用器将与默认值相同。它是可用的,以便您可以进一步自定义请求处理。
https://stackoverflow.com/questions/36921190
复制相似问题