السياق
Context
مفهوم
~22 دقيقة
السياق — Context
context.Context هي واحدة من أهم واجهات Go — تُستخدم لإلغاء العمليات، تحديد المهل الزمنية، وتمرير بيانات عبر طبقات البرنامج. كل طلب HTTP، كل استعلام قاعدة بيانات، كل عملية طويلة — يجب أن تأخذ context.
لماذا Context؟
تخيّل مستخدم فتح صفحة ثم أغلق المتصفح. بدون context، الخادم يستمر في المعالجة بلا فائدة! مع context، الخادم يعرف أن العميل رحل ويتوقف فوراً.
أنواع Context
main.go
Output:
الإلغاء — Cancellation
main.go
Output:
WithValue — تمرير بيانات
main.go
Output:
تحذير: لا تستخدم
WithValueلتمرير معاملات الدوال! استخدمها فقط للبيانات العابرة (request ID, auth token, trace ID).
Context في الواقع — Real-World Patterns
main.go
Output:
قواعد Context الذهبية
- Context هو المعامل الأول دائماً:
func DoSomething(ctx context.Context, ...) - لا تخزّنه في struct — مرّره كمعامل
- استخدم
context.Background()في main وcontext.TODO()مؤقتاً - دائماً استدعِ cancel:
defer cancel() - WithValue للبيانات العابرة فقط — ليس لمعاملات الدوال
تحدي — Challenge
أنشئ context بمهلة 150ms وشغّل عمليتين: واحدة سريعة (100ms) وأخرى بطيئة (200ms)