Sobes.tech
Middle

Hogyan lehet pánikot kiváltani egy csatornával való munkánál? Mi történik a nil-csatornával és a zárt csatornával végzett műveleteknél?

sobes.tech MI

Válasz az MI-től

Go-ban a csatornákkal való munka során pánik akkor fordul elő, ha:

  • Egy értéket küldünk egy lezárt csatornára (chan <- value), ez pánikot okoz.
  • Már lezárt csatornát zárunk (close(chan)), ez pánikot okoz.

A nil-csatornákkal kapcsolatban:

  • A nil-csatornával végzett küldési és fogadási műveletek örökre blokkolódnak (deadlock), de nem okoznak pánikot.

Példa:

var ch chan int // nil-csatorna

// <-ch // örökre blokkolódik
// ch <- 1 // örökre blokkolódik

ch = make(chan int)
close(ch)

// ch <- 1 // pánik: küldés lezárt csatornára

close(ch) // pánik: már lezárt csatorna bezárása