Avatar ·

क्या Go में चैनल को खुला छोड़ना सही है? परिणाम और सही अभ्यास

सभी को नमस्ते! मैंने अभी-अभी Go सीखना शुरू किया है और टास्क प्रोसेस करने के लिए एक छोटा सर्विस लिख रहा हूँ। मेरे पास एक goroutine-worker है जो चैनल से पढ़ता है और मैसेज प्रोसेस करता है। मैंने देखा कि अगर main function समाप्त हो जाता है, लेकिन चैनल खुला रहता है — तो प्रोग्राम क्रैश नहीं होता, बस चुपचाप समाप्त हो जाता है। लेकिन मुझे यकीन नहीं है कि यह सामान्य है या नहीं। यहाँ मैं जो कर रहा हूँ उसका एक सरल उदाहरण है: ```go package main import "fmt" func worker(tasks <-chan int) { for task := range tasks { fmt.Println("प्रोसेस की गई टास्क:", task) } } func main() { tasks := make(chan int) go worker(tasks) tasks <- 1 tasks <- 2 tasks <- 3 // मैं चैनल को बंद नहीं कर रहा हूँ, और प्रोग्राम समाप्त हो जाता है। // क्या ऐसा करना सामान्य है? } ``` मैंने पढ़ा है कि Go में garbage collector चैनल को बंद नहीं करता है, और उन्हें स्पष्ट रूप से बंद करना चाहिए। लेकिन मेरे उदाहरण में प्रोग्राम बिना किसी त्रुटि के काम करता है और समाप्त हो जाता है। जब मैं `close(tasks)` जोड़ूँगा, तो worker goroutine अंतिम तत्व को प्रोसेस करने के तुरंत बाद समाप्त हो जाएगा।