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)
}
Σε αυτό το παράδειγμα, το κανάλι κλείνει μία φορά μετά την αποστολή όλων των τιμών.