ホームページ > バックエンド開発 > Golang > Go ミドルウェア チェーンのエラーを処理するには?

Go ミドルウェア チェーンのエラーを処理するには?

Barbara Streisand
リリース: 2024-12-05 20:12:12
オリジナル
493 人が閲覧しました

How to Handle Errors in Go Middleware Chains?

エラーを返すハンドラーを含むミドルウェア パターン

質問: Go ミドルウェア パターンと、エラーを返すリクエスト ハンドラーを組み合わせるにはどうすればよいですか?エラー?

答え:

Go のミドルウェア パターンを使用すると、HTTP ハンドラーに適用できる再利用可能なコンポーネントを作成できます。ただし、従来のミドルウェア関数はエラーをネイティブに処理しません。

ミドルウェアでエラー処理を有効にするには、この目的専用の別のミドルウェア関数を使用することをお勧めします。この関数はミドルウェア チェーンの最後に配置し、チェーン内のハンドラーによって返されたエラーを処理する必要があります。

// Pattern for a middleware function that checks for errors from the next handler.
func errorHandler(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        err := next.ServeHTTP(w, r)
        if err != nil {
            // Handle the error, e.g., by logging or returning an appropriate HTTP response.
        }
    })
}
ログイン後にコピー

例:

エラーを結合するには-元の例のロギングミドルウェアを使用してハンドラーを返します:

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

// Create a special error-aware logging middleware.
func loggingWithErrorHandler(next errorHandler) errorHandler {
    return func(w http.ResponseWriter, r *http.Request) error {
        // Before executing the handler.
        start := time.Now()
        log.Printf("Started %s %s", r.Method, r.URL.Path)
        err := next(w, r)
        // After executing the handler.
        log.Printf("Completed %s in %v", r.URL.Path, time.Since(start))
        return err
    }
}

// Define an error-returning handler func.
func errorHandlerFunc(w http.ResponseWriter, r *http.Request) error {
    w.Write([]byte("Hello World from errorHandlerFunc!"))
    return nil
}

// Assemble the middleware chain and error-aware middleware.
http.Handle("/", loggingWithErrorHandler(errorHandlerFunc))
ログイン後にコピー

この組み合わせにより、次の利点を維持しながらエラー処理が可能になります。ミドルウェアのパターン。ラップされたエラー認識ミドルウェアは、ラップされたハンドラーによって返されたエラーを処理します。

以上がGo ミドルウェア チェーンのエラーを処理するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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