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