الوسيطات
توفر الوسيطات في Gin طريقة لمعالجة طلبات HTTP قبل وصولها إلى معالجات المسارات. دالة الوسيط لها نفس توقيع معالج المسار — gin.HandlerFunc — وعادةً تستدعي c.Next() لتمرير التحكم إلى المعالج التالي في السلسلة.
كيف تعمل الوسيطات
يستخدم Gin نموذج البصلة لتنفيذ الوسيطات. كل وسيط يعمل في مرحلتين:
- قبل المعالج — الكود قبل
c.Next()يُنفذ قبل معالج المسار. - بعد المعالج — الكود بعد
c.Next()يُنفذ بعد إرجاع معالج المسار.
هذا يعني أن الوسيطات تلف المعالج مثل طبقات البصلة. أول وسيط مُرفق هو الطبقة الخارجية.
func Logger() gin.HandlerFunc { return func(c *gin.Context) { start := time.Now()
// Pre-handler phase c.Next()
// Post-handler phase latency := time.Since(start) log.Printf("Request took %v", latency) }}إرفاق الوسيطات
هناك ثلاث طرق لإرفاق الوسيطات في Gin:
// 1. Global -- applies to all routesrouter := gin.New()router.Use(Logger(), Recovery())
// 2. Group -- applies to all routes in the groupv1 := router.Group("/v1")v1.Use(AuthRequired()){ v1.GET("/users", listUsers)}
// 3. Per-route -- applies to a single routerouter.GET("/benchmark", BenchmarkMiddleware(), benchHandler)الوسيطات المُرفقة في نطاق أوسع تُنفذ أولاً. في المثال أعلاه، طلب إلى GET /v1/users سينفذ Logger ثم Recovery ثم AuthRequired ثم listUsers.
في هذا القسم
- استخدام الوسيطات — إرفاق الوسيطات عالمياً أو لمجموعات أو مسارات فردية
- وسيطات مخصصة — كتابة دوال الوسيطات الخاصة بك
- استخدام وسيط BasicAuth — المصادقة الأساسية عبر HTTP
- Goroutines داخل الوسيطات — تشغيل المهام الخلفية بأمان من الوسيطات
- تكوين HTTP مخصص — معالجة الأخطاء والاسترداد في الوسيطات
- ترويسات الأمان — تعيين ترويسات الأمان الشائعة