Sobes.tech
Junior — Middle

Σε ποιο σημείο του κώδικα πρέπει να κλείσετε το κανάλι;

sobes.tech AI

Απάντηση από AI

Στο Go, το κανάλι πρέπει να κλείνει στο σημείο όπου δημιουργείται και όπου δεν προγραμματίζεται πλέον η αποστολή δεδομένων. Συνήθως, το κάνει ο αποστολέας για να σηματοδοτήσει στους παραλήπτες ότι δεν θα υπάρξουν άλλα δεδομένα.

Σημαντικό:

  • Οι παραλήπτες μπορούν να ελέγχουν το κλείσιμο του καναλιού κατά την ανάγνωση.
  • Μόνο ο αποστολέας πρέπει να κλείνει το κανάλι για να αποφευχθεί πανικός.

Παράδειγμα:

ch := make(chan int)
func() {
    defer close(ch) // κλείνουμε το κανάλι μετά την αποστολή όλων των δεδομένων
    for i := 0; i < 5; i++ {
        ch <- i
    }
}()

for val := range ch {
    fmt.Println(val) // λαμβάνουμε δεδομένα μέχρι να κλείσει το κανάλι
}