2016-03-27 9 views
8

新しいServeMuxを作成してhttp.Serverに登録するか、またはhttp.HandleFunchttp.Handlerを直接呼び出す必要がありますか?golangでServeMuxまたはhttpを直接使用する必要があります

http.HandleFuncは明らかにGoの悪い習慣と見なされるHTTPパッケージのグローバル状態を混乱させるので、ServeMuxを使った方が良いと思います。しかし、多くのチュートリアルでは、公式のチュートリアルでも、私はしばしばhttp.HandleFuncのルートが使われているのを見ます。

私は、ServeMuxがあるときにhttp.HandleFuncを使用するのはなぜですか?私はServeMuxにいくつかの利点があることを知っています(たとえば、常に接頭辞を繰り返さずに入れ子にすることができます)が、http.HandleFuncをマルチプレクサで選択する必要があるのはなぜですか?HandleFuncServeMuxを内部で使用します。

編集:コメントに約束されているように、私はGolang-devに追加の(そして無用なIMO機能を)非難するように頼んだ。彼らはいいえと言った。 Here is the link.

+0

など、便利な方法であり、ダウンサンプルコードでは決まり文句を保つために、おそらく便利な、しかしServeMuxを作成することはあなたにそれをラップすることができます、別の内の巣にそれを、コンストラクタからエクスポート私はこれが良い質問だと言いたかったのですが、これは以前から出てきたので、将来の他の人にとっては有用なものです) – elithrar

+0

elithrar:それが私がここで尋ねた理由です。 Googleで何も見つかりませんでした。 Imo、 'http.HandleFunc'と' http.Handle'は非推奨です。 'Mux'と' Server'を使うと、さらに2行しか追加されず、あいまいさは常に悪くなります。特に明らかなやり方が「悪い」場合は特にそうです。 – Matt3o12

+0

Go1の互換性の約束は削除を許可していないので、「2.0」(これは長い年月を要している)まで「差し迫っている」。 – elithrar

答えて

4

正しい軌道に乗っています。輪郭を描いた理由から、ServeMuxをインスタンス化する方がよいでしょう。

DefaultServeMuxを使用すると、net/http/pprofを使用するとプロファイリングエンドポイントが公開される危険性があります。これはDefaultServeMuxにアタッチされているためです。

http.Handle|HandleFuncは(

関連する問題