تخطَّ إلى المحتوى

الربط

يوفر Gin نظام ربط قوي يحلل بيانات الطلب إلى هياكل Go ويتحقق منها تلقائياً. بدلاً من استدعاء c.PostForm() يدوياً أو قراءة c.Request.Body، تحدد هيكلاً بعلامات وتدع Gin يقوم بالعمل.

يوفر Gin عائلتين من طرق الربط:

الطريقة عند الخطأ استخدمها عندما
c.Bind، c.BindJSON، إلخ. تستدعي c.AbortWithError(400, err) تلقائياً تريد أن يتعامل Gin مع استجابات الخطأ
c.ShouldBind، c.ShouldBindJSON، إلخ. تُرجع الخطأ لتتعامل معه أنت تريد استجابات خطأ مخصصة

في معظم الحالات، يُفضل استخدام ShouldBind لمزيد من التحكم في معالجة الأخطاء.

type LoginForm struct {
User string `form:"user" binding:"required"`
Password string `form:"password" binding:"required"`
}
func main() {
router := gin.Default()
router.POST("/login", func(c *gin.Context) {
var form LoginForm
// ShouldBind checks Content-Type to select a binding engine automatically
if err := c.ShouldBind(&form); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
c.JSON(http.StatusOK, gin.H{"status": "logged in"})
})
router.Run(":8080")
}

يستطيع Gin ربط البيانات من مصادر عديدة: JSON وXML وYAML وTOML وبيانات النماذج (URL-encoded وmultipart) وسلاسل الاستعلام ومعاملات URI والترويسات. استخدم علامة الهيكل المناسبة (json، xml، yaml، form، uri، header) لتعيين الحقول. قواعد التحقق توضع في علامة binding وتستخدم صياغة go-playground/validator.