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.