تحسين معالجة الأخطاء في 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() { جهاز التوجيه := gin.Default() router.Use(JSONAppErrorReporter()) router.GET("/hostgroups/:id"، fetchSingleHostGroup) جهاز التوجيه.تشغيل(:3000")func main() {
router := gin.Default()
router.Use(JSONAppErrorReporter())
router.GET("/hostgroups/:id", fetchSingleHostGroup)
router.Run(":3000")
}
موارد إضافية لمزيد من الأفكار حول معالجة الأخطاء في Gin، راجع الموارد التالية:
[مشكلة الجن-غونيك] #327](https://github.com/gin-gonic/gin/issues/327)
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3