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>
利点
このアプローチにはいくつかの利点があります。
追加リソース
詳細な情報と代替ソリューションについては、以下を参照してください。次のリソースへ:
以上がJin を使用してより優れたエラー処理を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。