"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية إرجاع خطأ في حالة ذعر وظيفة Go؟

كيفية إرجاع خطأ في حالة ذعر وظيفة Go؟

تم النشر بتاريخ 2024-11-18
تصفح:326

How to Return an Error if a Go Function Panics?

العودة من التأجيل في Go

أنت تواجه مشكلة حيث تريد إرجاع خطأ في حالة ذعر إحدى الوظائف في Go. فيما يلي تحليل وإصلاح للتعليمات البرمجية الخاصة بك:

func getReport(filename string) (rep report, err error) {
    rep.data = make(map[string]float64)

    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Recovered in f", r)
            switch x := r.(type) {
            case string:
                err = errors.New(x)
            case error:
                err = x
            default:
                err = errors.New("Unknown panic")
            }
            rep = nil // Invalidate rep
        }
    }()
    panic("Report format not recognized.")
    // rest of the getReport function...
}

مفهوم الذعر والتأجيل

  • الذعر: يشير الذعر إلى وجود خطأ في وقت التشغيل يمكن اكتشافه عن طريق الاسترداد في وظيفة التأجيل.
  • التأجيل: عبارة التأجيل تؤخر تنفيذ دالة حتى تخرج الوظيفة المحيطة.

تعديلات في الكود:

    تستخدم وظيفة التأجيل الآن عبارات حالة التبديل للتعامل مع القيمة المستردة بشكل صحيح.
  • إذا كانت القيمة المستردة عبارة عن سلسلة، فسيتم تحويلها إلى خطأ باستخدام الأخطاء.جديد ().
  • يتم إبطال متغير مندوب بعد حدوث خطأ لضمان عدم إرجاع أي بيانات.
  • يتم إرجاع متغير منب على أنه لا شيء في حالة وجود خطأ، والذي يطابق الخاص بك توقيع الوظيفة الأصلية.
مع هذه التغييرات، ستعيد وظيفة getReport خطأً إذا شعرت بالذعر بسبب تنسيق تقرير غير صالح. ستكون رسالة الخطأ إما قيمة الذعر (إذا كانت سلسلة) أو خطأ عام يشير إلى حالة ذعر غير معروفة.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3