Junior — Middle
Τι συμβαίνει αν προσπαθήσετε να διαβάσετε δεδομένα από ένα κανάλι που αυτή τη στιγμή δεν περιέχει στοιχεία;
sobes.tech AI
Απάντηση από AI
Στο Go, αν προσπαθήσετε να διαβάσετε από ένα κανάλι που αυτή τη στιγμή δεν περιέχει στοιχεία, η συμπεριφορά εξαρτάται από τον τύπο του καναλιού:
- Καλάθι με buffer: αν το buffer είναι άδειο, η ανάγνωση μπλοκάρει μέχρι να γραφεί ένα στοιχείο στο κανάλι.
- Χωρίς buffer: η ανάγνωση μπλοκάρει μέχρι μια άλλη goroutine να στείλει μια τιμή.
Έτσι, η ανάγνωση από ένα άδειο κανάλι οδηγεί σε μπλοκάρισμα της τρέχουσας goroutine μέχρι να εμφανιστούν δεδομένα ή να κλείσει το κανάλι.
Παράδειγμα:
ch := make(chan int)
// Η ανάγνωση από ένα άδειο κανάλι θα μπλοκάρει την εκτέλεση
val := <-ch // μπλοκάρει μέχρι κάποιος να στείλει μια τιμή
// Για να αποφύγετε το μπλοκάρισμα, μπορείτε να χρησιμοποιήσετε select με default
select {
case val := <-ch:
fmt.Println("Λήφθηκε", val)
default:
fmt.Println("Δεν υπάρχουν δεδομένα στο κανάλι")
}