Sobes.tech
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: κλείσιμο ήδη κλειστού καναλιού