ホームページ > バックエンド開発 > Golang > Jin を使用してより優れたエラー処理を実装するにはどうすればよいですか?

Jin を使用してより優れたエラー処理を実装するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-10-31 12:06:31
オリジナル
826 人が閲覧しました

How to Implement Better Error Handling with Gin?

Gin を使用したより良いエラー処理

この記事では、あるアプローチにヒントを得て、Gin を使用してより良いエラー処理を実装する方法を検討します。 Go フレームワークで採用されています。私たちの目標は、エラー処理を一元化し、重複コードの管理と削減を容易にすることです。

カスタム エラー タイプ

カスタム appError に似ています。 Go フレームワークに入力したら、構造化された方法でエラー コードとメッセージを処理するためのカスタム エラー タイプを定義しましょう:

<code class="go">type appError struct {
    Code     int    `json:"code"`
    Message  string `json:"message"`
}</code>
ログイン後にコピー

エラー報告用のミドルウェア

一元化するにはエラー処理では、エラー応答を処理するミドルウェアを作成できます。

<code class="go">func JSONAppErrorReporter() gin.HandlerFunc {
    return jsonAppErrorReporterT(gin.ErrorTypeAny)
}

func jsonAppErrorReporterT(errType gin.ErrorType) gin.HandlerFunc {
    return func(c *gin.Context) {
        c.Next()
        detectedErrors := c.Errors.ByType(errType)

        // Process errors and convert them to our custom error type
        if len(detectedErrors) > 0 {
            err := detectedErrors[0].Err
            parsedError := parseAPperror(err) 

            // Put error into response
            c.IndentedJSON(parsedError.Code, parsedError)
            c.Abort()
        }
    }
}</code>
ログイン後にコピー

このミドルウェアでは、検出されたエラーは appError タイプに解析され、JSON 応答として返されます。

ハンドラーでのエラー報告

ハンドラー関数内のエラーを報告するには、gin.Context.Error():

<code class="go">func fetchSingleHostGroup(c *gin.Context) {
    hostgroupID := c.Param("id")

    hostGroupRes, err := getHostGroupResource(hostgroupID)

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

    c.JSON(http.StatusOK, *hostGroupRes)
}</code>
ログイン後にコピー

利点

このアプローチにはいくつかの利点があります。

  • 集中エラー処理により、エラー管理が簡素化されます。
  • カスタム エラー タイプにより、構造化された有益なエラー レポートが可能になります。
  • ミドルウェアはエラーをインターセプトし、リクエスト サイクル全体でエラーが伝播するのを防ぎます。

追加リソース

詳細な情報と代替ソリューションについては、以下を参照してください。次のリソースへ:

  • [Gin の問題: エラーの処理](https://github.com/gin-gonic/gin/issues/214)
  • [Gin の問題:エラー処理のステータス コード](https://github.com/gin-gonic/gin/issues/401)
  • [Gin-Merry: エラー ハンドラー](https://github.com/gin- contrib/gin-merry)
  • [Gin-Frsh-Showerrors](https://github.com/Double0h/gin-frsh-showerrors)

以上がJin を使用してより優れたエラー処理を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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