Sobes.tech
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: αποστολή σε κλειστό κανάλι