はのは、私はハンドラはミドルウェアのトンを持っているこのバイパスgolang HTTPハンドラ
handler := middleware1.New(
middleware2.New(
middleware3.New(
middleware4.New(
NewHandler()
),
),
),
)
http.ListenAndServe(":8080", handler)
のようなコードがあるとしましょう。
は今、私はすべてのミドルウェアをスキップするカスタムエンドポイントを、作成したいので、内部serveHTTP()
機能を何も何も実行されない:
http.HandleFunc("/testing", func(
w http.ResponseWriter,
r *http.Request,
) {
fmt.Fprintf(w, "it works!")
return
})
http.ListenAndServe(":8080", handler)
しかし、これは動作しないと/testing
に達したことはありません。理想的には、私はhandler
を全く変更したくないです、それは可能ですか?あなたはListenAndServe
にハンドラ引数を残すことになる場合にはhttp.DefaultServerMux
を、使用して同じ結果を達成するhttp.HandleFunc
とhttp.Handle
機能を使用して
m := http.NewServeMux()
m.HandleFunc("/testing", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "it works!")
return
})
m.Handle("/", handler)
http.ListenAndServe(":8080", m)
:
'http.HandleFunc'は' DefaultServeMux'に適用され、 'handler'では適用されません。 'ServeMux'に' handler'を追加したいのですか、 '/ handler'を' handler'に追加しますか? – JimB
@JimB ServeMuxにハンドラを追加する方が良い解決策だと思われます。ハンドラに '/ testing'を追加してもミドルウェアはスキップされないので、そうでしょうか? –
「ハンドラー」がミドルウェアの前に多重化を行わない場合は、別にそれを行う必要があります.ServeMux(または任意のマルチプレクサー/ルータパッケージ)がそれを行うことができます。 – JimB