最近の議論では、次のような手法が提案されました。カスタムルーターとエラータイプを使用して、Golang HTTP アプリケーションでのエラー処理を強化します。目標は、エラーの報告と処理を一元化し、特定のハンドラー内で c.JSON(500, err) を直接呼び出す必要性を排除することでした。
Gin 内フレームワークの場合、これはミドルウェアと gin.Context.Error() メソッドを使用して実現できます。その仕組みは次のとおりです。
<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>
<code class="go">router.Use(JSONAppErrorReporter(gin.ErrorTypeAny))</code>
<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>
<code class="go">router := gin.Default() router.GET("/hostgroups/:id", fetchSingleHostGroup) router.Run(":3000")</code>
Gin でのエラー処理の詳細については、次のリソースを参照してください:
以上がJin フレームワークで集中エラー処理を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。