AzLearn

السياق

Context

مفهوم ~22 دقيقة

السياق — Context

context.Context هي واحدة من أهم واجهات Go — تُستخدم لإلغاء العمليات، تحديد المهل الزمنية، وتمرير بيانات عبر طبقات البرنامج. كل طلب HTTP، كل استعلام قاعدة بيانات، كل عملية طويلة — يجب أن تأخذ context.

لماذا Context؟

تخيّل مستخدم فتح صفحة ثم أغلق المتصفح. بدون context، الخادم يستمر في المعالجة بلا فائدة! مع context، الخادم يعرف أن العميل رحل ويتوقف فوراً.

أنواع Context

main.go

الإلغاء — Cancellation

main.go

WithValue — تمرير بيانات

main.go

تحذير: لا تستخدم WithValue لتمرير معاملات الدوال! استخدمها فقط للبيانات العابرة (request ID, auth token, trace ID).

Context في الواقع — Real-World Patterns

main.go

قواعد Context الذهبية

  1. Context هو المعامل الأول دائماً: func DoSomething(ctx context.Context, ...)
  2. لا تخزّنه في struct — مرّره كمعامل
  3. استخدم context.Background() في main و context.TODO() مؤقتاً
  4. دائماً استدعِ cancel: defer cancel()
  5. WithValue للبيانات العابرة فقط — ليس لمعاملات الدوال
تحدي — Challenge