Avatar ·

Go में goroutine को सही तरीके से कैसे रोकें? बैकग्राउंड टास्क को समाप्त करने में समस्या

सभी को नमस्ते! मैं एक शुरुआती Go डेवलपर हूँ, और मुझे goroutine को मैनेज करने में समस्या आ रही है। मैं एक छोटा सर्विस लिख रहा हूँ जो समय-समय पर बाहरी API की स्थिति जाँचता है और लोकल कैश को अपडेट करता है। इसके लिए मैं एक बैकग्राउंड goroutine को infinite loop और time.Sleep के साथ चलाता हूँ। समस्या यह है कि प्रोग्राम को समाप्त करते समय (जैसे Ctrl+C से) या goroutine को रीस्टार्ट करने की आवश्यकता होने पर, मैं इसे सही तरीके से रोक नहीं पाता। अगर मैं सिर्फ main को समाप्त करता हूँ, तो goroutine या तो लटक जाती है या panic हो जाती है। मैंने ग्लोबल फ्लैग `var running bool` का उपयोग करने और लूप में इसे चेक करने की कोशिश की, लेकिन यह तुरंत काम नहीं करता, और कभी-कभी goroutine I/O ऑपरेशन पर ब्लॉक हो जाती है। यहाँ मेरे कोड का उदाहरण है: ```go package main import ( "fmt" "time" ) func worker() { for { fmt.Print