في Go، تساعد حزمة السياق في إدارة القيم ذات نطاق الطلب، وإشارات الإلغاء، والمواعيد النهائية.
هناك طريقتان شائعتان لبدء السياق هما context.TODO() و context.Background().
على الرغم من أنهم يتصرفون بشكل مماثل، إلا أنهم يخدمون أغراضًا مختلفة.
context.Background() هو الإعداد الافتراضي عندما لا تحتاج إلى أي معالجة خاصة (مثل الإلغاء أو المواعيد النهائية).
غالبًا ما يتم استخدامه في main أو init أو عند تهيئة العمليات التي لا تحتاج إلى سياق أكثر تحديدًا.
func main() { ctx := context.Background() server := http.Server{Addr: ":8080", BaseContext: func(net.Listener) context.Context { return ctx }} log.Fatal(server.ListenAndServe()) }
في هذا المثال، يتم استخدام context.Background() لإنشاء سياق أساسي لخادم HTTP.
context.TODO() هو سياق العنصر النائب. استخدمه عندما لا تكون متأكدًا من السياق الذي يجب توفيره أو عند التخطيط لإعادة البناء لاحقًا.
func processOrder() { ctx := context.TODO() // Placeholder, decision on context pending err := db.SaveOrder(ctx, orderData) if err != nil { log.Println("Failed to save order:", err) } }
هنا، يتم استخدام context.TODO() مؤقتًا لعملية قاعدة البيانات حتى يتم تحديد سياق أكثر تحديدًا.
ترجع كلتا الدالتين سياقًا فارغًا، لكنهما تعبران عن نوايا مختلفة:
متى يتم استخدام context.Background():
متى يتم استخدام context.TODO():
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3