Sobes.tech
Senior

Ποιο από τα παρακάτω τμήματα κώδικα περιέχει σφάλμα ή πιθανό πρόβλημα που σχετίζεται με τη δουλειά με κανάλια; Επιλογή 1 package main func main() { ch := make(chan int) ch <- 1 } Επιλογή 2 package main func main() { ch := make(chan int, 1) ch <- 1 } Επιλογή 3 package main func main() { ch := make(chan int, 1) ch <- 1 <-ch } Επιλογή 4 package main func main() { ch := make(chan int) close(ch) <-ch } Επιλογή 5 package main func main() { ch := make(chan int, 3) ch <- 4 }

sobes.tech AI

Απάντηση από AI

Το σφάλμα βρίσκεται στην Επιλογή 1:

package main
func main() {
    ch := make(chan int)
    ch <- 1
}

Εδώ δημιουργείται ένα κανάλι χωρίς buffer ch := make(chan int). Η αποστολή σε αυτό το κανάλι ch <- 1 μπλοκάρει μέχρι κάποιος να διαβάσει από το κανάλι. Στον κώδικα αυτό, δεν υπάρχει δέκτης, οπότε το πρόγραμμα θα κολλήσει για πάντα (deadlock).

Η επιλογή 2 είναι σωστή, καθώς το κανάλι έχει buffer μεγέθους 1, και η αποστολή δεν μπλοκάρει αν ο buffer δεν είναι γεμάτος.

Η επιλογή 3 είναι επίσης σωστή: η αποστολή και η λήψη είναι ισορροπημένες.

Η επιλογή 4 είναι σωστή: μπορείς να διαβάσεις από ένα κλειστό κανάλι, η ανάγνωση θα επιστρέψει την τιμή μηδέν και δεν θα μπλοκάρει.

Η επιλογή 5 είναι σωστή: buffer 3, αποστέλλεται μια τιμή, ο buffer δεν είναι γεμάτος.

Συνοπτικά, το πρόβλημα βρίσκεται μόνο στην Επιλογή 1 — μπλοκάρισμα κατά την αποστολή σε ένα κανάλι χωρίς buffer και χωρίς δέκτη.