Middle
Jak wywołać panikę podczas pracy z kanałem? Co się dzieje podczas operacji na kanale nil i zamkniętym kanale?
sobes.tech AI
Odpowiedź od AI
W Go, panika podczas pracy z kanałami występuje w następujących przypadkach:
- Wysyłanie wartości do zamkniętego kanału (
chan <- value) powoduje panikę. - Zamknięcie już zamkniętego kanału (
close(chan)) powoduje panikę.
Jeśli chodzi o kanały nil:
- Operacje wysyłania i odbierania z kanałem nil blokują się na zawsze (deadlock), ale nie powodują paniki.
Przykład:
var ch chan int // kanał nil
// <-ch // blokuje się na zawsze
// ch <- 1 // blokuje się na zawsze
ch = make(chan int)
close(ch)
// ch <- 1 // panic: wysyłanie na zamknięty kanał
close(ch) // panic: zamknięcie już zamkniętego kanału