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

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

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-28 09:45:12729ブラウズ

How Can Go Middleware Handle Errors Returned by Request Handlers?

Go ミドルウェア パターンとエラーを返すリクエスト ハンドラーを組み合わせる方法

Go ミドルウェア パターンは、ラッピングと前処理のための強力なツールですHTTP リクエスト。ただし、従来のミドルウェア ハンドラーはエラーを返すことができないため、エラー処理が複雑になる可能性があります。

エラーを返すリクエスト ハンドラー

ハンドラーがエラーを返せるようにするには、カスタム ハンドラーを定義できます。ハンドラー タイプ:

type errorHandler func(http.ResponseWriter, *http.Request) error

このタイプにより、ハンドラーはパニックやロギングを使用する代わりにエラーを生成できます。

エラー ミドルウェア

これらのエラーを処理するには、エラーを返すハンドラー タイプを受け入れることができる特別なミドルウェアが必要です。

func errorHandler(h errorHandler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        err := h(w, r)
        if err != nil {
            // Handle error appropriately (e.g., log, send error response)
        }
    })
}

このミドルウェアはエラーを返すハンドラーをラップし、エラーを返すハンドラーを処理します。

使用法

エラーを返すハンドラーでミドルウェア チェーンを使用するには、最終ハンドラーをエラー ミドルウェアでラップし、他のミドルウェアとチェーンするだけです。

// Create a middleware chain.
moreMiddleware(myMiddleware(errorHandler(myHandlerReturningError)))

ルーター統合

簡単にするために、このパターンをサポートし、ミドルウェア チェーンを自動的に構築する独自のルーターを作成することを検討してください。

ルーターの例

https://github.com/fragmenta/mux/blob/master/mux.go

このサンプルルーターは、ミドルウェアチェーンを構築し、エラーを効率的に処理する方法を示しています。これは、エラー処理にカスタム ハンドラー タイプを使用する利点を示し、ミドルウェアの使用を簡素化します。

以上がGo ミドルウェアはリクエスト ハンドラーから返されたエラーをどのように処理できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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