क्या Go में गोरूटीन के काम खत्म करने के बाद चैनल को खुला छोड़ा जा सकता है?
सभी को नमस्ते! मैं एक शुरुआती Go डेवलपर हूँ और चैनलों को समझने की कोशिश कर रहा हूँ। मेरे पास यह कोड है:
```go
package main
import (
"fmt"
"time"
)
func worker(done chan bool) {
fmt.Println("काम कर रहा हूँ...")
time.Sleep(2 * time.Second)
fmt.Println("तैयार!")
// यहाँ मैं चैनल बंद नहीं कर रहा हूँ
done <- true
}
func main() {
done := make(chan bool)
go worker(done)
// परिणाम की प्रतीक्षा कर रहे हैं
result := <-done
fmt.Println("परिणाम:", result)
// done चैनल का क्या होगा? यह खुला रहता है।
time.Sleep(1 * time.Second)
fmt.Println("प्रोग्राम समाप्त")
}
```
कोड काम करता है, लेकिन मैंने देखा कि मैं कभी `done` चैनल को बंद नहीं करता। डॉक्यूमेंटेशन में लिखा है कि चैनलों को बंद करना चाहिए, लेकिन मुझे समझ नहीं आता कि क्या यह अनिवार्य है। मेरे उदाहरण में प्रोग्राम समाप्त हो जाता है, और चैनल बस गायब हो जाता है। लेकिन क्या होगा अगर प्रोग्राम लंबे समय तक चलता है, और मैं ऐसे कई चैनल बनाता हूँ? क्या इससे मेमोरी लीक या अन्य समस्याएँ होंगी? क्या कोई नियम हैं कि चैनल को कब बंद करना अनिवार्य है और कब इसे खुला छोड़ा जा सकता है?