Sobes.tech
Junior — Middle

Czy można wysłać dane do kanału o wartości nil?

sobes.tech AI

Odpowiedź od AI

W Go nie można wysyłać danych do kanału, jeśli jest on nil. Próba wysłania wartości do nil-kanału spowoduje, że goroutine zostanie na zawsze zablokowana, ponieważ taki kanał nie jest zainicjalizowany i nie może przyjąć danych.

Przykład:

var ch chan int // ch == nil

go func() {
    ch <- 1 // blokuje się na zawsze
}()

// program się zawiesi

Aby uniknąć blokady, przed użyciem kanału należy go zainicjalizować:

ch := make(chan int)
ch <- 1 // działa poprawnie

Jeśli kanał może być nil, przed wysłaniem warto sprawdzić jego wartość lub użyć select z default, aby uniknąć blokad.