我想知道是否应该创建一个新的ServeMux并将其注册到http.Server,还是应该直接调用http.HandleFunc和http.Handler?
我认为使用ServeMux的路由更好,因为http.HandleFunc显然会破坏HTTP的全局状态,这在Go中被认为是错误的做法。然而,在许多教程中,甚至在官方教程中,我经常看到使用的http.HandleFunc路由。
这让我感到奇怪:当有一个http.HandleFunc时,为什么要使用ServeMux?我知道ServeMux有一些优点(例如,您可以在不重复前缀的情况下嵌套它),但是我想知道为什么我会选择http.HandleFunc而不是复用器,特别是因为HandleFunc在内部使用ServeMux。
编辑:正如在评论中承诺的那样,我已经要求在戈朗德夫上取消额外的(和无用的IMO功能),他们说不(嗯,对person说不)。这是链接。
发布于 2016-03-27 15:24:23
您在正确的轨道上:您应该更喜欢实例化您自己的ServeMux,因为您已经描述了原因。
使用DefaultServeMux也会导致在使用net/http/pprof时暴露分析端点的风险,因为这些端点是附加到DefaultServeMux的。
http.Handle|HandleFunc是方便的方法,在示例代码中保持样板可能很有用,但是创建ServeMux使您能够包装它,将它嵌套在另一个模板中,从构造函数导出它,等等。
https://stackoverflow.com/questions/36248946
复制相似问题