Middle+
Ποιος πρέπει να κλείσει το κανάλι;
sobes.tech AI
Απάντηση από AI
Ο δημιουργός του καναλιού πρέπει να το κλείσει και να μην στέλνει πλέον δεδομένα σε αυτό. Αυτό είναι σημαντικό για να αποφευχθεί πανικός κατά την προσπάθεια αποστολής δεδομένων σε κλειστό κανάλι και ώστε οι παραλήπτες να μπορούν να καθορίσουν σωστά το τέλος της ροής δεδομένων.
Κύριοι κανόνες:
- Ο αποστολέας κλείνει το κανάλι όταν δεν θα στέλνει πλέον τιμές.
- Οι παραλήπτες δεν πρέπει να κλείνουν το κανάλι.
- Το κλείσιμο του καναλιού σηματοδοτεί στους παραλήπτες ότι δεν θα υπάρξουν νέια δεδομένα.
Παράδειγμα:
func παραγωγός(ch chan<- int) {
for i := 0; i < 5; i++ {
ch <- i
}
close(ch) // Κλείνουμε το κανάλι μετά την αποστολή όλων των δεδομένων
}
func καταναλωτής(ch <-chan int) {
for val := range ch {
fmt.Println(val)
}
// Όταν το κανάλι κλείσει, ο βρόχος τελειώνει
}
func main() {
ch := make(chan int)
go παραγωγός(ch)
καταναλωτής(ch)
}