Ποιο από τα παρακάτω τμήματα κώδικα περιέχει σφάλμα ή πιθανό πρόβλημα που σχετίζεται με τη δουλειά με κανάλια; Επιλογή 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 και χωρίς δέκτη.