Junior — Middle
Ar galima siųsti duomenis į kanalą, kurio reikšmė yra nil?
sobes.tech AI
Atsakymas iš AI
Go kalboje, nėra įmanoma siųsti duomenų į kanalą, jei jis yra nil. Bandymas siųsti reikšmę į nil kanalą sukels gorutinos užblokavimą amžinai, nes toks kanalas nėra inicializuotas ir negali priimti duomenų.
Pavyzdys:
var ch chan int // ch == nil
go func() {
ch <- 1 // užblokuojama amžinai
}()
// programa užstringa
Norint išvengti užblokavimo, kanalą reikia inicializuoti prieš naudojant:
ch := make(chan int)
ch <- 1 // veikia teisingai
Jei kanalas gali būti nil, prieš siuntimą patikrinkite jo reikšmę arba naudokite select su default, kad išvengtumėte užblokavimo.