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