chi في Go: دليل شامل مع أمثلة عملية

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

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

ابدأ الدورة

ما هي مكتبة chi ولماذا تحتاجها؟

chi هي مكتبة خفيفة وعالية الأداء لتوجيه طلبات HTTP في لغة البرمجة Go. صُممت لتطوير تطبيقات الويب وواجهات API، وتوفر للمطورين أداة قوية ومرنة لتوجيه طلبات HTTP.

على عكس الحزمة القياسية net/http، تقدم chi المزايا التالية:

  • التوافق مع net/http: تطبق chi واجهة http.Handler بالكامل، مما يسهل دمجها مع كود Go الحالي والوسائط (middleware).
  • التوجيه السياقي: تستخدم chi context.Context لتمرير معاملات المسار (مثل معرف المستخدم) بين الوسائط والمعالجات.
  • المسارات المتداخلة (Subrouters): تتيح تجميع المسارات في كتل منطقية (مثل /api/v1/users).
  • تجميع الوسائط (Middleware): يمكن تطبيق الوسائط على الموجه بأكمله أو على مجموعات مسارات محددة.
  • دعم مدمج لـ CORS، التسجيل، الضغط، وغيرها من المهام الشائعة.

تعتبر chi مثالية لبناء REST APIs، الخدمات المصغرة، وأي تطبيق ويب يتطلب بنية نظيفة وفعالة وسهلة الاختبار.

تثبيت مكتبة chi

لتثبيت chi، استخدم مدير الحزم القياسي في Go. تأكد من تثبيت Go (الإصدار 1.14 أو أحدث).

go get -u github.com/go-chi/chi/v5

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

import "github.com/go-chi/chi/v5"

غالبًا ما يتم تثبيت حزمة الوسائط أيضًا:

go get -u github.com/go-chi/cors
go get -u github.com/go-chi/chi/v5/middleware

بداية سريعة مع مثال برمجي

لنقم بإنشاء خادم HTTP بسيط يستجيب لطلبات GET.

package main

import (
    "fmt"
    "net/http"

    "github.com/go-chi/chi/v5"
)

func main() {
    r := chi.NewRouter()

    // تعريف المسار
    r.Get("/hello", func(w http.ResponseWriter, r *http.Request) {
        fmt.Fprintf(w, "مرحبًا من chi!")
    })

    // تشغيل الخادم
    http.ListenAndServe(":3000", r)
}

قم بتشغيل هذا الكود وافتح المتصفح على الرابط http://localhost:3000/hello. سترى الرسالة "مرحبًا من chi!".

الدوال الأساسية في مكتبة chi

دعنا نستعرض الدوال الرئيسية في مكتبة chi. جميع الأمثلة تفترض أنك قمت بإنشاء الموجه r := chi.NewRouter().

1. Get(pattern string, handlerFn http.HandlerFunc)

الوظيفة: تسجيل معالج لطريقة HTTP GET وفقًا لنمط المسار المحدد.

المعاملات:

  • pattern — سلسلة نصية للمسار (مثل /users، /users/{id}).
  • handlerFn — دالة المعالج التي تطابق التوقيع http.HandlerFunc.

مثال:

r.Get("/", func(w http.ResponseWriter, r *http.Request) {
    w.Write([]byte("الصفحة الرئيسية"))
})

2. Post(pattern string, handlerFn http.HandlerFunc)

الوظيفة: تسجيل معالج لطريقة HTTP POST.

المعاملات: مشابهة لـ Get.

مثال:

r.Post("/users", func(w http.ResponseWriter, r *http.Request) {
    // منطق إنشاء مستخدم جديد
    w.WriteHeader(http.StatusCreated)
    w.Write([]byte("تم إنشاء المستخدم"))
})

3. Put(pattern string, handlerFn http.HandlerFunc)

الوظيفة: تسجيل معالج لطريقة HTTP PUT (تُستخدم عادةً للتحديث الكامل

توصيات