Sobes.tech
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