「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > ミドルウェアアプローチを使用して、Gin Web アプリケーション内のエラーを効果的に処理するにはどうすればよいですか?

ミドルウェアアプローチを使用して、Gin Web アプリケーション内のエラーを効果的に処理するにはどうすればよいですか?

2024 年 11 月 7 日に公開
ブラウズ:796

How can I effectively handle errors within my Gin web application using a middleware approach?

Gin でのエラー処理の強化

Gin でのカスタム エラー処理には、エラー応答を処理するミドルウェアの使用が含まれます。これにより、エラー ロジックを通常のフロー ロジックから分離できます。

エラー処理ミドルウェア

type appError struct {
    Code    int
    Message string
}

func JSONAppErrorReporter() gin.HandlerFunc {
    return func(c *gin.Context) {
        c.Next()
        errors := c.Errors.ByType(gin.ErrorTypeAny)

        if len(errors) > 0 {
            err := errors[0].Err
            var parsedError *appError
            switch err.(type) {
            case *appError:
                parsedError = err.(*appError)
            default:
                parsedError = &appError{
                    Code:    http.StatusInternalServerError,
                    Message: "Internal Server Error",
                }
            }
            // Respond with JSON serialized error
            c.IndentedJSON(parsedError.Code, parsedError)
            c.Abort()
        }
    }
}

ハンドラー関数での使用法

func fetchSingleHostGroup(c *gin.Context) {
    hostgroupID := c.Param("id")

    hostGroupRes, err := getHostGroupResource(hostgroupID)

    if err != nil {
        // Attach error to the context
        c.Error(err)
        return
    }

    // Respond with valid data
    c.JSON(http.StatusOK, *hostGroupRes)
}

サーバーのセットアップ

func main() {
    router := gin.Default()
    router.Use(JSONAppErrorReporter())
    router.GET("/hostgroups/:id", fetchSingleHostGroup)
    router.Run(":3000")
}

追加リソース

Gin でのエラー処理の詳細については、次のリソースを参照してください:

  • [gin-gonic issue] #327](https://github.com/gin-gonic/gin/issues/327)
  • [gin-gonic 問題 #651](https://github.com/gin-gonic/gin /issues/651)
  • [チャープ](https://github.com/go-chi/chi/tree/master/middleware)
  • [gin-merry](https:/ /github.com/gin-contrib/gin-merry)
  • [gin-frsh-showerrors](https://github.com/frsh/gin-showerrors)
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3