Gorilla Mux للغة Go: دليل كامل مع أمثلة

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

ما هو Gorilla Mux ولماذا هو مطلوب؟

\n\n

Gorilla Mux (يُشار إليه غالبًا باسم "mux" اختصارًا لـ "multiplexer") هو موجه HTTP قوي وشائع للغة البرمجة Go. وهو جزء من نظام Gorilla Web Toolkit البيئي، الذي يوفر العديد من المكونات المفيدة لتطوير الويب.

\n\n

لماذا نحتاج إلى موجه منفصل إذا كانت المكتبة القياسية للغة Go تحتوي بالفعل على net/http؟ يعتبر http.ServeMux القياسي مناسبًا تمامًا للمشاريع البسيطة، لكنه يعاني من عدة قيود:

\n
    \n
  • لا يدعم أجزاء المسار الديناميكية (مثل /users/{id}).
  • \n
  • لا يدعم طرق HTTP (GET، POST، PUT، DELETE) — يجب التحقق يدويًا.
  • \n
  • لا يدعم التعبيرات النمطية في المسارات.
  • \n
  • لا يحتوي على middleware مدمجة (البرمجيات الوسيطة).
  • \n
\n\n

يحل Gorilla Mux كل هذه المشكلات. فهو يسمح لك بـ:

\n
    \n
  • تحديد مسارات معقدة بأجزاء متغيرة.
  • \n
  • تقييد المسارات حسب طرق HTTP، والمضيفين، والعناوين، ومعاملات الاستعلام.
  • \n
  • استخدام الموجهات الفرعية (subrouters) لتجميع المسارات.
  • \n
  • التكامل بسهولة مع middleware.
  • \n
  • بناء واجهات برمجة تطبيقات RESTful بعناوين URL نظيفة ومفهومة.
  • \n
\n\n

مكتبة Gorilla Mux هي المعيار الفعلي لبناء خوادم HTTP في Go. تُستخدم في آلاف المشاريع، بدءًا من الخدمات المصغرة الصغيرة وصولاً إلى التطبيقات التجارية الكبيرة.

\n\n

التثبيت

\n\n

يتم تثبيت Gorilla Mux في مشروع Go عبر مدير الحزم go get. افتح الطرفية في جذر مشروعك ونفذ الأمر التالي:

\n\n
go get -u github.com/gorilla/mux
\n\n

سيقوم هذا الأمر بتنزيل المكتبة وإضافتها إلى ملف go.mod الخاص بك. بعد ذلك، يمكنك استيرادها في الكود الخاص بك:

\n\n
import "github.com/gorilla/mux"
\n\n

إذا كنت تستخدم Go Modules (وهو المعيار لـ Go 1.16+)، فستتم إضافة المكتبة تلقائيًا إلى ملفي go.mod و go.sum. كل شيء جاهز للعمل!

\n\n

بداية سريعة: خادم HTTP بسيط مع Gorilla Mux

\n\n

لنقم بإنشاء خادم ويب صغير يعالج طلبات GET على المسار الجذر ويعيد تحية.

\n\n
package 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!".

\n\n

لاحظ أننا نمرر الموجه الخاص بنا r إلى http.ListenAndServe. هذا ممكن لأن mux.Router ينفذ الواجهة http.Handler.

\n\n

الطرق والوظائف الأساسية لـ Gorilla Mux

\n\n

دعنا نستعرض الطرق الرئيسية للمكتبة. سيتم شرح كل طريقة مع وصفها ومعاملاتها ومثال عملي.

\n\n

1. mux.NewRouter()

\n

ما تفعله: تنشئ مثيلًا جديدًا للموجه. هذه هي نقطة البداية لجميع المسارات.

\n

المعاملات: لا يوجد.

\n

تُرجع: مؤشرًا إلى mux.Router.

\n\n
r := mux.NewRouter()\n// الآن r جاهز لتحديد المسارات
\n\n

2. r.HandleFunc(path, handler)

\n

ما تفعله: تسجل دالة معالجة لمسار معين. هذه هي الطريقة الأساسية لتحديد المسارات.

\n

مع

توصيات