Middle+
Σε ποιες περιπτώσεις θα μπλοκαριστεί για πάντα η ανάγνωση από το κανάλι; Τι συμβαίνει όταν γράφεις σε ένα nil κανάλι; Όταν γράφεις σε ένα κλειστό κανάλι;
sobes.tech AI
Απάντηση από AI
-
Η ανάγνωση από το κανάλι θα μπλοκαριστεί για πάντα αν το κανάλι είναι άδειο και κανείς δεν σκοπεύει να γράψει σε αυτό (π.χ., όλοι οι αποστολείς είναι κλειστοί ή απουσιάζουν).
-
Η εγγραφή σε ένα nil-κανάλι (ένα κανάλι ίσο με nil) μπλοκάρεται πάντα για πάντα, καθώς το nil-κανάλι δεν έχει αρχικοποιηθεί και δεν μπορεί να δεχτεί δεδομένα.
-
Η εγγραφή σε ένα κλειστό κανάλι προκαλεί πανικό (panic) στο Go, καθώς αυτό απαγορεύεται και θεωρείται σφάλμα χρόνου εκτέλεσης.
Παράδειγμα:
var ch chan int // nil-κανάλι
// <-ch // η ανάγνωση από το nil-κανάλι μπλοκάρεται για πάντα
// ch <- 1 // η εγγραφή σε nil-κανάλι μπλοκάρεται για πάντα
ch = make(chan int)
close(ch)
// ch <- 2 // panic: αποστολή σε κλειστό κανάλι