Sobes.tech
Junior — Middle

Πόσες φορές πρέπει να κλείσετε ένα κανάλι στο Go για να αποφύγετε σφάλματα;

sobes.tech AI

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

Στη γλώσσα Go, πρέπει να κλείνετε ένα κανάλι ακριβώς μία φορά, όταν δεν σκοπεύετε να στέλνετε άλλα δεδομένα σε αυτό. Το κλείσιμο του καναλιού πολλές φορές θα προκαλέσει ένα panic (runtime panic).

Σημαντικό:

  • Αυτός που γράφει στο κανάλι πρέπει να το κλείσει, όχι αυτός που διαβάζει.
  • Αν το κανάλι χρησιμοποιείται για τη μεταφορά δεδομένων μεταξύ goroutines, το κλείσιμο υποδηλώνει ότι δεν θα υπάρξουν άλλα δεδομένα.

Παράδειγμα:

ch := make(chan int)
func() {
    defer close(ch) // κλείνουμε το κανάλι μία φορά
    for i := 0; i < 5; i++ {
        ch <- i
    }
}()

for val := range ch {
    fmt.Println(val)
}

Σε αυτό το παράδειγμα, το κανάλι κλείνει μία φορά μετά την αποστολή όλων των τιμών.