Junior — Middle
Ar leidžiama siųsti duomenis į kanalą, kuris nėra atidarytas skaitymui ir rašymui?
sobes.tech AI
Atsakymas iš AI
Go kalboje nėra įmanoma siųsti duomenų į kanalą, kuris nėra atidarytas rašymui. Jei kanalas uždarytas (close(channel)), bandymas jį siųsti sukels paniką (runtime panic).
Tačiau, iš uždaryto kanalo galima skaityti: tokiu atveju, skaitymas grąžins nulines kanalo tipo reikšmę ir žymeklį, rodantį, kad kanalas uždarytas.
Pavyzdys:
ch := make(chan int)
close(ch)
// Skaityti iš uždaryto kanalo yra saugu
value, ok := <-ch // ok == false
// Siųsti į uždarytą kanalą sukels paniką
ch <- 1 // panic: send on closed channel
Todėl, duomenis galima siųsti tik į atvirus kanalus.