ホームページ >バックエンド開発 >Golang >Jin ミドルウェアにグローバル エラー処理を実装するにはどうすればよいですか?

Jin ミドルウェアにグローバル エラー処理を実装するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-06 03:52:02577ブラウズ

How Can You Implement Global Error Handling in a Gin Middleware?

Gin ミドルウェアでのエラー処理

Gin では、各ルート ハンドラーでエラーを個別に処理するのが一般的です。ただし、これによりコードが反復的になり、潜在的なエラーをすべて検出することが困難になる可能性があります。別のアプローチは、エラーをグローバルに処理するカスタム ミドルウェアを作成することです。

エラー処理ミドルウェアの作成

エラー処理ミドルウェアを作成するには、次の関数を定義できます。 *gin.Context を引数として受け入れます。この関数内で、c.Next() を使用してハンドラー チェーンを実行し、発生するエラーをキャプチャできます。

<code class="go">func ErrorHandler(c *gin.Context) {
    c.Next()

    for _, err := range c.Errors {
        // Handle the error
    }
}</code>

ミドルウェアの登録

1 回ミドルウェアを作成したら、router.Use() を呼び出してグローバルに登録できます。これにより、ルート ハンドラーが呼び出される前にミドルウェアが確実に呼び出されます。

<code class="go">router := gin.New()
router.Use(ErrorHandler)</code>

エラーの処理

ミドルウェア内では、任意のエラーを処理できます。あなたのお好みの方法で。一般的なアプローチの 1 つは、c.JSON() を使用して、エラーの詳細を含む JSON 応答を返すことです。

<code class="go">for _, err := range c.Errors {
    c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
}</code>

致命的でないエラーの処理

場合によっては、致命的ではないエラーが発生する場合がありますが、そのエラーはキャプチャしてログに記録する必要がありますが、リクエストは中止されません。これらのエラーの場合、c.Error() を使用してエラーをコンテキストに添付できます。

<code class="go">func (h *Handler) List(c *gin.Context) {
    movies, err := h.service.ListService()

    if err != nil {
        c.Error(err)
        return
    }

    c.JSON(http.StatusOK, movies)
}</code>

c.Error() で添付されたエラーには、ErrorHandler ミドルウェアでアクセスできます。

Node.js との比較

Node.js では、エラー オブジェクトをパラメーターとしてミドルウェアに渡すのが一般的です。これは、Gin では直接サポートされていませんが、カスタム エラー タイプを使用し、ミドルウェアの err.Err フィールドで照合することで、同様の効果を実現できます。

結論

Gin でのエラー処理にカスタム ミドルウェアを使用することは、コードを簡素化し、すべてのエラーが一貫して処理されるようにする効果的な方法です。エラー処理の一元的な場所を提供することで、必要に応じてエラーのログ、レポート、処理を簡単に行うことができます。

以上がJin ミドルウェアにグローバル エラー処理を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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