Junior — Middle
Μπορείτε να στείλετε δεδομένα σε ένα κανάλι που έχει τιμή nil;
sobes.tech AI
Απάντηση από AI
Στη Go, δεν μπορείτε να στείλετε δεδομένα σε ένα κανάλι αν αυτό είναι nil. Η προσπάθεια να στείλετε μια τιμή σε ένα nil κανάλι θα προκαλέσει το μπλοκάρισμα της goroutine για πάντα, καθώς ένα τέτοιο κανάλι δεν έχει αρχικοποιηθεί και δεν μπορεί να δεχθεί δεδομένα.
Παράδειγμα:
var ch chan int // ch == nil
go func() {
ch <- 1 // μπλοκάρει για πάντα
}()
// το πρόγραμμα θα κολλήσει
Για να αποφύγετε το μπλοκάρισμα, πρέπει να αρχικοποιήσετε το κανάλι πριν το χρησιμοποιήσετε:
ch := make(chan int)
ch <- 1 // λειτουργεί σωστά
Αν το κανάλι μπορεί να είναι nil, πριν στείλετε, ελέγξτε την τιμή του ή χρησιμοποιήστε select με default για να αποφύγετε το μπλοκάρισμα.