Junior — Middle
Vai ir atļauts sūtīt datus uz kanālu, kas nav atvērts lasīšanai un rakstīšanai?
sobes.tech AI
Atbilde no AI
Go valodā nav iespējams sūtīt datus uz kanālu, kas nav atvērts rakstīšanai. Ja kanāls ir slēgts (close(channel)), mēģinājums to sūtīt izraisīs paniku (runtime panic).
Tomēr, slēgtu kanālu ir iespējams lasīt: šajā gadījumā lasīšana atgriezīs kanāla tipa nullvērtību un karogu, kas norāda, ka kanāls ir slēgts.
Piemērs:
ch := make(chan int)
close(ch)
// Lasīšana no slēgta kanāla ir droša
value, ok := <-ch // ok == false
// Sūtīt uz slēgtu kanālu izraisīs paniku
ch <- 1 // panic: send on closed channel
Tādēļ, datus var sūtīt tikai uz atvērtajiem kanāliem.