我是新手,想要设置一些路由以及cors. 我见过两种这样做的方式,一种是使用 初始化多路复用器NewServeMux,然后使用 分配处理程序HandleFunc,另一种是HandleFunc直接使用http。这就是我的意思:
mux := http.NewServeMux()
mux.HandleFunc("/api", apiFunc)
mux.HandleFunc("/", indexFunc)
Run Code Online (Sandbox Code Playgroud)
与
http.HandleFunc("/api", apiFunc)
http.HandleFunc("/", indexFunc)
http.ListenAndServe("127.0.0.1:3001", nil)
Run Code Online (Sandbox Code Playgroud)
这些方法有什么不同吗?如果他们完成类似的事情,是否有一个更常见/务实?
http.HandleFunc()使用DefaultServeMux这是一个全局变量。因此任何第三方包都可以访问DefaultServeMux. 在第三方软件包遭到破坏的情况下,它可以使用 DefaultServeMux 将恶意处理程序暴露给您的 Web 应用程序。这就是为什么建议在生产代码中使用您自己的servemux(如第一个示例所示)的原因之一。
http.HandleFunc等人将您的处理程序应用于包ServeMux中保存的包全局实例http,http.ListenAndServe然后启动。您还可以像在第一个示例中那样创建自己的实例,这为您提供了更多控制权并使单元测试变得更容易。最后,选择权在你;便利函数和包全局变量可能适合维护期有限的小型项目,但对于较大或寿命较长的项目,我通常建议管理您自己的 和ServeMux实例Server。