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

الربط

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

Bind مقابل ShouldBind

يوفر 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.

في هذا القسم