Avatar ·

هل يمكن اعتراض إشارة Ctrl+C (SIGINT) وتنفيذ دالة تنظيف مثل defer؟

مرحباً بالجميع! أنا أكتب خادم HTTP صغير بلغة Go يعالج الطلبات ويحفظ البيانات في ملف. عندما أشغل الخادم وأضغط Ctrl+C، ينتهي البرنامج فوراً ويبقى الملف في حالة غير مكتملة. أريد أنه عند استقبال SIGINT (Ctrl+C) يتم أولاً تنفيذ دالة تنظيف (مثل flush البيانات على القرص وإغلاق الملفات)، وبعدها فقط ينتهي البرنامج. أعرف عن `defer` — يعمل بشكل ممتاز عندما تنتهي الدالة بشكل طبيعي أو عبر `return`. لكن إذا ضغطت Ctrl+C، لا يعمل `defer` لأن البرنامج يُقتل ببساطة بواسطة الإشارة. هل يمكن اعتراض هذه الإشارة وتنفيذ منطق cleanup بأسلوب `defer`؟ حتى لا أكتب حلولاً مؤقتة بفحص يدوي للـ flags. إليك مثال على الكود الخاص بي: ```go package main import ( "fmt" "log" "net/http" "os" "os/signal" "syscall" ) func main() { // نفتح ملف للسجلات f, _ := os.Create("server.log") defer f.Close() http