تتيح Go الاستعادة من panic باستخدام الدالة المدمجة
recover. يمكن لـrecover منع panic من إنهاء البرنامج،
والسماح له بمتابعة التنفيذ بدلًا من ذلك.
مثال على موضع فائدة ذلك: لا يريد الخادم أن يتعطل إذا حدث خطأ
حرج في أحد اتصالات العملاء، بل يريد إغلاق ذلك الاتصال ومواصلة
خدمة العملاء الآخرين. وهذا ما تفعله net/http في Go افتراضيًا
لخوادم HTTP.
packagemain
import"fmt"
تستدعي هذه الدالة panic.
funcmayPanic(){panic("a problem")}
يجب استدعاء recover داخل دالة مؤجلة. عندما تستدعي الدالة
المحيطة panic، ستُنفذ الدالة المؤجلة ويلتقط استدعاء
recover داخلها حالة panic.
funcmain(){
قيمة إرجاع recover هي الخطأ الذي أُطلق في استدعاء
panic.
deferfunc(){ifr:=recover();r!=nil{
fmt.Println("Recovered. Error:\n",r)}}()
mayPanic()
لن يعمل هذا الكود، لأن mayPanic تستدعي panic. يتوقف
تنفيذ main عند موضع panic، ويُستأنف داخل الإغلاق المؤجل.