لغة Go بالأمثلة: الذعر (panic)

تشير panic عادة إلى حدوث خطأ غير متوقع. نستخدمها غالبًا للإخفاق السريع عند أخطاء لا ينبغي أن تحدث أثناء التشغيل العادي، أو لسنا مستعدين لمعالجتها بسلاسة.

package main
import (
    "os"
    "path/filepath"
)
func main() {

سنستخدم panic في أنحاء هذا الموقع للتحقق من الأخطاء غير المتوقعة. هذا هو البرنامج الوحيد في الموقع المصمم لاستدعاء panic.

    panic("a problem")

من الاستخدامات الشائعة لـpanic إيقاف التنفيذ إذا أعادت دالة قيمة خطأ لا نعرف كيف نعالجها، أو لا نريد معالجتها. يوضح الآتي استدعاء panic عند حدوث خطأ غير متوقع أثناء إنشاء ملف جديد.

    path := filepath.Join(os.TempDir(), "file")
    _, err := os.Create(path)
    if err != nil {
        panic(err)
    }
}

سيؤدي تشغيل هذا البرنامج إلى استدعاء panic، وطباعة رسالة خطأ وتتبعات روتينات Go، ثم الخروج بحالة غير صفرية.

عند تنفيذ أول panic في main، يخرج البرنامج دون الوصول إلى بقية الكود. إذا أردت رؤية البرنامج وهو يحاول إنشاء ملف مؤقت، فحوّل استدعاء panic الأول إلى تعليق.

$ go run panic.go
panic: a problem
goroutine 1 [running]:
main.main()
    /.../panic.go:12 +0x47
...
exit status 2

لاحظ أنه بخلاف بعض اللغات التي تستخدم الاستثناءات لمعالجة كثير من الأخطاء، من الشائع في Go استخدام قيم إرجاع تدل على الخطأ كلما أمكن ذلك.

المثال التالي: .