Sobes.tech
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 για να αποφύγετε το μπλοκάρισμα.