فهم `panic`
جزء من قسم Logic & Flow في رحلة GO على Coddy — الدرس 42 من 68.
في لغة Go، تُعد panic وظيفة مدمجة تُستخدم في الحالات الاستثنائية للغاية حيث يواجه برنامجك خطأً لا يمكن إصلاحه ويجب أن يتوقف على الفور. على عكس الأخطاء العادية التي تتعامل معها بشكل طبيعي، فإن panic مخصصة للإخفاقات الكارثية التي تشير إلى وجود خطأ جوهري في منطق البرنامج أو البيئة.
عندما يتم استدعاء panic، فإنه يوقف فوراً التنفيذ العادي للدالة الحالية ويبدأ في فك مكدس الاستدعاءات (unwinding the call stack). وهذا يجعله مختلفاً تماماً عن نهج Go المعتاد المتمثل في إرجاع الأخطاء التي يمكن معالجتها بواسطة الكود المستدعي.
في لغة Go الاصطلاحية، نادراً ما يُستخدم panic. يفضل مجتمع Go بشدة معالجة الأخطاء الصريحة من خلال قيم الإرجاع بدلاً من معالجة الأخطاء القائمة على panic. قد تواجه panic في حالات مثل الوصول إلى مصفوفة خارج الحدود، أو إلغاء إشارة مؤشر nil، أو عندما تكتشف مكتبة حالة مستحيلة تشير إلى وجود خطأ برمجي.
يجب أن تتعامل معظم برامج Go مع الأخطاء بسلاسة باستخدام واجهة الخطأ القياسية التي كنت تتعلم عنها. يجب التفكير في panic فقط عندما لا توجد حقاً طريقة معقولة لبرنامجك لمواصلة التشغيل.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
ورقة مرجعية
في لغة Go، تُعد panic وظيفة مدمجة للأخطاء غير القابلة للاسترداد والتي توقف تنفيذ البرنامج على الفور:
panic("something went terribly wrong")عند استدعاء panic، فإنها توقف الوظيفة الحالية وتفكك مكدس الاستدعاءات (call stack). استخدم panic باعتدال - فقط في حالات الفشل الكارثية حيث لا يمكن للبرنامج الاستمرار. تفضل Go معالجة الأخطاء الصريحة من خلال قيم الإرجاع بدلاً من معالجة الأخطاء القائمة على panic.
تشمل حالات panic الشائعة الوصول إلى مصفوفة خارج الحدود، أو إلغاء مرجعية مؤشر فارغ (nil pointer dereference)، أو حالات البرنامج المستحيلة التي تشير إلى وجود أخطاء برمجية (bugs).
جرّب بنفسك
لا يتضمّن هذا الدرس تحدّيًا برمجيًا.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Logic & Flow
1تدفق التحكم المتقدم
جملة Switch مع `fallthrough`الخروج من الحلقات المتداخلةالاستمرار في حلقة محددةجملة `goto`ملخص - التحكم المتقدم في الحلقات2الـ Structs والميثودز (Methods)
تعريف الـ Methods على الـ Structsالـ Value Receiversالـ Pointer Receiversاختيار الـ Receiversالـ Methods مقابل الـ Functionsملخص - سلوك الـ Struct5تعمق في الـ Maps
Maps من نوع Structsالـ Pointers كقيم في الـ Mapsالتحقق من الـ Nil Mapsمقارنة الـ Mapsمراجعة - عداد تكرار الكلمات3الواجهات (الأساسيات)
ما هي الواجهة؟تعريف الواجهةتطبيق الواجهةاستخدام أنواع الواجهاتالواجهة الفارغةتأكيدات النوع (Type Assertions)تبديل النوع (Type Switch)ملخص - الأشكال والسلوكيات