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

هل يمكن لاستعادة الذعر تعديل المتغيرات المحلية في الحرفيات الوظيفية في GO؟

نشر في 2025-03-22
تصفح:972

Can Panic Recovery Modify Local Variables in Function Literals in Go?

ومع ذلك ، فإن هذا السلوك غير متسق عند استخدام المتغيرات المحلية في الحرفية للدالة. النظر في الكود التالي:

تأجيل func () { إذا e: = recover () ؛ e! = nil { النتيجة = -1 err = errors.new (e. (سلسلة)) } } () حاجِز() النتيجة = 100 خطأ = لا شيء يعود } BUNC BAR () { الذعر ("الذعر حدث") }

يعمل هذا الرمز كما هو متوقع ، والتعيين الناتج إلى -1 ويخطئ في رسالة خطأ مخصصة بعد التعافي من الذعر. ومع ذلك ، إذا استخدمنا المتغيرات المحلية داخل الوظيفة الحرفية ، فإن السلوك يتغير:

func foo() (result int, err error) {
    defer func() {
        if e := recover(); e != nil {
            result = -1
            err = errors.New(e.(string))
        }
    }()
    bar()

    result = 100
    err = nil
    return
}

func bar() {
    panic("panic happened")
}
في هذه الحالة ، تتم إعادة تعيين النتيجة إلى 0 بدلاً من -1. وذلك لأن بيان التأجيل في الوظيفة الحرفية لا يمكن الوصول أو تعديل قيم الإرجاع المسماة لأنها لم تعد في نطاق. من الأهمية بمكان استخدام قيم الإرجاع المسماة عند محاولة تعديلها باستخدام عبارة تأجيل داخل وظيفة حرفية. لا يمكن الوصول إلى المتغيرات المحلية في مثل هذه الحالات.

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

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

Copyright© 2022 湘ICP备2022001581号-3