ホームページ >バックエンド開発 >Golang >Jin フレームワークで集中エラー処理を実装するにはどうすればよいですか?

Jin フレームワークで集中エラー処理を実装するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-02 22:40:30771ブラウズ

How to Implement Centralized Error Handling in the Gin Framework?

Gin フレームワークでのエラー処理の改善

カスタム HTTP ルーターとエラー タイプによるエラー処理の強化

最近の議論では、次のような手法が提案されました。カスタムルーターとエラータイプを使用して、Golang HTTP アプリケーションでのエラー処理を強化します。目標は、エラーの報告と処理を一元化し、特定のハンドラー内で c.JSON(500, err) を直接呼び出す必要性を排除することでした。

Gin での集中型エラー処理の実装

Gin 内フレームワークの場合、これはミドルウェアと gin.Context.Error() メソッドを使用して実現できます。その仕組みは次のとおりです。

  1. エラー ミドルウェアの作成: gin.HandlerFunc インターフェイスを実装するカスタム ミドルウェアを定義します。このミドルウェアは、エラー処理の中心点として機能します。
<code class="go">type AppError struct {
    Code     int    `json:"code"`
    Message  string `json:"message"`
}

func JSONAppErrorReporter(errType gin.ErrorType) gin.HandlerFunc {
    return func(c *gin.Context) {
        c.Next()

        errors := c.Errors.ByType(errType)

        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",
                }
            }

            c.IndentedJSON(parsedError.Code, parsedError)
            c.Abort()
        }
    }
}</code>
  1. ミドルウェアを使用する: ルーター設定にエラー処理ミドルウェアを登録します。
<code class="go">router.Use(JSONAppErrorReporter(gin.ErrorTypeAny))</code>
  1. からのエラーを報告Handlers: パス ハンドラー内で、エラーを直接処理する代わりに、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>
  1. サーバーの構成: サーバーのセットアップでルーターを構成し、
<code class="go">router := gin.Default()
router.GET("/hostgroups/:id", fetchSingleHostGroup)
router.Run(":3000")</code>

追加のエラー処理リソース

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

  • [Gin- gonic 問題: 処理エラー](https://github.com/gin-gonic/gin/issues/403)
  • [Gin-gonic の問題: ステータス コードがエラーです処理](https://github.com/gin-gonic/gin/issues/264)
  • [チャープ](https://github.com/fengleng/chirp)
  • [ジンメリーエラーハンドラー](https://github.com/savsgio/gin-merry)
  • [Gin-frsh-showerrors](https://github.com/emicklei/go-frsh/tree/master/showerrors )

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

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