Sobes.tech
Junior — Middle

Lze odeslat data do kanálu s hodnotou nil?

sobes.tech AI

Odpověď od AI

V jazyce Go nelze odesílat data do kanálu, pokud je nil. Pokus o odeslání hodnoty do nil-kanálu způsobí, že goroutine bude navždy zablokována, protože takový kanál není inicializován a nemůže přijímat data.

Příklad:

var ch chan int // ch == nil

go func() {
    ch <- 1 // bude navždy blokováno
}()

// program se zasekne

Aby se zabránilo zablokování, je třeba kanál před použitím inicializovat:

ch := make(chan int)
ch <- 1 // funguje správně

Pokud může být kanál nil, před odesláním je třeba zkontrolovat jeho hodnotu nebo použít select s default, aby se zabránilo zablokování.