ما هو Gorilla Mux ولماذا هو مطلوب؟
\n\nGorilla Mux (يُشار إليه غالبًا باسم "mux" اختصارًا لـ "multiplexer") هو موجه HTTP قوي وشائع للغة البرمجة Go. وهو جزء من نظام Gorilla Web Toolkit البيئي، الذي يوفر العديد من المكونات المفيدة لتطوير الويب.
\n\nلماذا نحتاج إلى موجه منفصل إذا كانت المكتبة القياسية للغة Go تحتوي بالفعل على net/http؟ يعتبر http.ServeMux القياسي مناسبًا تمامًا للمشاريع البسيطة، لكنه يعاني من عدة قيود:
- \n
- لا يدعم أجزاء المسار الديناميكية (مثل
/users/{id}). \n - لا يدعم طرق HTTP (GET، POST، PUT، DELETE) — يجب التحقق يدويًا. \n
- لا يدعم التعبيرات النمطية في المسارات. \n
- لا يحتوي على middleware مدمجة (البرمجيات الوسيطة). \n
يحل Gorilla Mux كل هذه المشكلات. فهو يسمح لك بـ:
\n- \n
- تحديد مسارات معقدة بأجزاء متغيرة. \n
- تقييد المسارات حسب طرق HTTP، والمضيفين، والعناوين، ومعاملات الاستعلام. \n
- استخدام الموجهات الفرعية (subrouters) لتجميع المسارات. \n
- التكامل بسهولة مع middleware. \n
- بناء واجهات برمجة تطبيقات RESTful بعناوين URL نظيفة ومفهومة. \n
مكتبة Gorilla Mux هي المعيار الفعلي لبناء خوادم HTTP في Go. تُستخدم في آلاف المشاريع، بدءًا من الخدمات المصغرة الصغيرة وصولاً إلى التطبيقات التجارية الكبيرة.
\n\nالتثبيت
\n\nيتم تثبيت Gorilla Mux في مشروع Go عبر مدير الحزم go get. افتح الطرفية في جذر مشروعك ونفذ الأمر التالي:
go get -u github.com/gorilla/mux\n\nسيقوم هذا الأمر بتنزيل المكتبة وإضافتها إلى ملف go.mod الخاص بك. بعد ذلك، يمكنك استيرادها في الكود الخاص بك:
import "github.com/gorilla/mux"\n\nإذا كنت تستخدم Go Modules (وهو المعيار لـ Go 1.16+)، فستتم إضافة المكتبة تلقائيًا إلى ملفي go.mod و go.sum. كل شيء جاهز للعمل!
بداية سريعة: خادم HTTP بسيط مع Gorilla Mux
\n\nلنقم بإنشاء خادم ويب صغير يعالج طلبات GET على المسار الجذر ويعيد تحية.
\n\npackage main\n\nimport (\n "fmt"\n "log"\n "net/http"\n\n "github.com/gorilla/mux"\n)\n\nfunc main() {\n // إنشاء موجه جديد\n r := mux.NewRouter()\n\n // تحديد المسار: GET /\n r.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {\n fmt.Fprintf(w, "مرحبًا بالعالم! هذا هو Gorilla Mux!")\n })\n\n // تشغيل الخادم على المنفذ 8080\n log.Println("الخادم قيد التشغيل على http://localhost:8080")\n log.Fatal(http.ListenAndServe(":8080", r))\n}\n\nقم بتشغيل هذا الكود (go run main.go) وافتح في المتصفح http://localhost:8080. سترى الرسالة "مرحبًا بالعالم! هذا هو Gorilla Mux!".
لاحظ أننا نمرر الموجه الخاص بنا r إلى http.ListenAndServe. هذا ممكن لأن mux.Router ينفذ الواجهة http.Handler.
الطرق والوظائف الأساسية لـ Gorilla Mux
\n\nدعنا نستعرض الطرق الرئيسية للمكتبة. سيتم شرح كل طريقة مع وصفها ومعاملاتها ومثال عملي.
\n\n1. mux.NewRouter()
\nما تفعله: تنشئ مثيلًا جديدًا للموجه. هذه هي نقطة البداية لجميع المسارات.
\nالمعاملات: لا يوجد.
\nتُرجع: مؤشرًا إلى mux.Router.
r := mux.NewRouter()\n// الآن r جاهز لتحديد المسارات\n\n2. r.HandleFunc(path, handler)
\nما تفعله: تسجل دالة معالجة لمسار معين. هذه هي الطريقة الأساسية لتحديد المسارات.
\nمع