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