Dalam perbincangan baru-baru ini, satu teknik telah dicadangkan untuk tingkatkan pengendalian ralat dalam aplikasi HTTP Golang menggunakan penghala tersuai dan jenis ralat. Matlamatnya adalah untuk memusatkan pelaporan dan pengendalian ralat, menghapuskan keperluan untuk panggilan terus kepada c.JSON(500, err) dalam pengendali tertentu.
Dalam Gin rangka kerja, ini boleh dicapai melalui penggunaan middleware dan kaedah gin.Context.Error(). Begini cara ia berfungsi:
<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>
Untuk maklumat lanjut tentang pengendalian ralat dalam Gin, rujuk sumber ini:
Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Pengendalian Ralat Berpusat dalam Rangka Kerja Gin?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!