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

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

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-27 10:09:18534ブラウズ

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:3項条件演算子次の記事:3項条件演算子