Sobes.tech
Middle+

Za jakých podmínek bude čtení z kanálu navždy zablokováno? Co se stane při zápisu do nil-kanálu? Při zápisu do uzavřeného kanálu?

sobes.tech AI

Odpověď od AI

  • Čtení z kanálu bude navždy zablokováno, pokud je kanál prázdný a nikdo neplánuje do něj psát (například, všichni odesílatelé jsou uzavřeni nebo chybí).

  • Zápis do nil-kanálu (kanál roven nil) je vždy navždy zablokován, protože nil-kanál není inicializován a nemůže přijímat data.

  • Zápis do uzavřeného kanálu způsobí v Go paniku (panic), protože je to zakázáno a považuje se to za chybu za běhu.

Příklad:

var ch chan int // nil-kanál

// <-ch // čtení z nil-kanálu je navždy zablokováno

// ch <- 1 // zápis do nil-kanálu je navždy zablokován

ch = make(chan int)
close(ch)
// ch <- 2 // panic: odeslání na uzavřený kanál