ホームページ > バックエンド開発 > Golang > Go ミドルウェアはエラーを返すリクエスト ハンドラーをどのように処理できますか?

Go ミドルウェアはエラーを返すリクエスト ハンドラーをどのように処理できますか?

Mary-Kate Olsen
リリース: 2024-11-27 10:09:18
オリジナル
579 人が閲覧しました

How Can Go Middleware Handle Error-Returning Request Handlers?

エラーを返すリクエスト ハンドラーを使用したミドルウェアの実装

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート