Avatar ·

Ctrl+C (SIGINT) को कैसे इंटरसेप्ट करें और Go में defer की तरह संसाधन सफाई कैसे करें?

सभी को नमस्कार! मैं Go में एक सर्वर एप्लिकेशन लिख रहा हूं जो TCP कनेक्शन खोलता है, फाइलों और डेटाबेस के साथ काम करता है। मुझे चाहिए कि Ctrl+C (SIGINT सिग्नल) दबाने पर प्रोग्राम सही तरीके से बंद हो: कनेक्शन बंद करे, डेटा सेव करे, संसाधन मुक्त करे। मैं `defer` के बारे में जानता हूं — यह फंक्शन के सामान्य समाप्ति पर बढ़िया काम करता है। लेकिन जब मैं Ctrl+C दबाता हूं, प्रोग्राम बस मार दिया जाता है, और `defer` काम नहीं करता। उदाहरण: ```go func main() { db, _ := sql.Open("postgres", "...") defer db.Close() // कोई अनंत लूप for { // काम कर रहे हैं } } ``` Ctrl+C दबाने पर `defer db.Close()` निष्पादित नहीं होता। मैंने `os/signal` पैकेज के बारे में पढ़ा है, लेकिन समझ नहीं पाया कि 'defer-जैसा' व्यवहार कैसे व्यवस्थित करूं। कैसे सुनिश्चित करूं कि किसी भी समाप्ति (सामान्य या सिग्नल द्वारा) पर सफाई फंक्शन गारंटी से निष्पादित हो? graceful shutdown के साथ उदाहरण चाहिए।