Sobes.tech
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.