Go のミドルウェア パターン
Go ミドルウェア パターンにより、開発者は次のことをカプセル化できます。横断的な問題を解決し、コア機能を変更することなくハンドラーを強化します。通常、ミドルウェア パターンには、ハンドラーを受け入れ、追加のロジックを含む新しいハンドラーを返す関数の作成が含まれます。
func middlewareHandler(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // Middleware logic before application handler execution next.ServeHTTP(w, r) // Middleware logic after application handler execution }) }
このパターンでは、ログ記録や認証用の再利用可能なミドルウェア コンポーネントの作成が可能になります。
エラーを返すハンドラー パターン
あるいは、次のような方法もあります。ハンドラーを直接エラーを返す関数として実装します。これによりエラー処理が簡素化され、開発者は必要に応じてエラーを返すか、関数の最後に nil を返すだけで済みます。
type errorHandler func(http.ResponseWriter, *http.Request) error func (f errorHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { err := f(w, r) if err != nil { // Error handling logic (logging, etc.) } }
このパターンは、エラーを処理するための明確で簡潔な方法を提供します。
ミドルウェアとエラーを返すハンドラーの組み合わせ
ミドルウェア パターンを組み合わせるにはエラーを返すハンドラーを使用する場合は、エラーの処理を担当する専用のミドルウェアを導入できます:
func errorHandler(h MyHandlerFunc) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { err := h(w, r) if err != nil { // Error handling logic (logging, etc.) } }) }
このミドルウェアは、エラーを返すハンドラーをラップするために使用できます:
moreMiddleware(myMiddleWare(errorHandler(myhandleFuncReturningError)))
ミドルウェアの懸念を分離することで、このアプローチは、エラー処理から、ミドルウェア チェーン内での柔軟性とエラー処理機能を提供します。
以上がGo ミドルウェアはエラーを返すリクエスト ハンドラーをどのように処理できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。