Middle
Πώς προκαλείτε πανικό κατά την εργασία με ένα κανάλι; Τι συμβαίνει κατά τις λειτουργίες με ένα nil-κανάλι και ένα κλειστό κανάλι;
sobes.tech AI
Απάντηση από AI
Στο Go, το πανικό κατά τη χρήση των καναλιών συμβαίνει στις ακόλουθες περιπτώσεις:
- Η αποστολή μιας τιμής σε κλειστό κανάλι (
chan <- value) προκαλεί πανικό. - Το κλείσιμο ενός ήδη κλειστού καναλιού (
close(chan)) προκαλεί πανικό.
Όσον αφορά τα nil κανάλια:
- Οι λειτουργίες αποστολής και λήψης με ένα nil κανάλι μπλοκάρουν επ' αόριστον (deadlock), αλλά δεν προκαλούν πανικό.
Παράδειγμα:
var ch chan int // nil κανάλι
// <-ch // μπλοκάρει επ' αόριστον
// ch <- 1 // μπλοκάρει επ' αόριστον
ch = make(chan int)
close(ch)
// ch <- 1 // panic: αποστολή σε κλειστό κανάλι
close(ch) // panic: κλείσιμο ήδη κλειστού καναλιού