Sobes.tech
Middle

Ko var un ko nevar darīt ar plūsmas drošību kanālos Go?

sobes.tech AI

Atbilde no AI

Var:

  • Sūtīt un saņemt datus. Katrs lasījums un rakstīšana kanālā ir atomiska operācija.
  • Aizvērt kanālu. Aizvēršana signalizē, ka datu sūtīšana ir pabeigta.
  • Izmantot select operatoru nevainojamai mijiedarbībai ar vairākiem kanāliem.
  • Izmantot buferētus un nebuferētus kanālus dažādiem sinhronizācijas scenārijiem.

Nav atļauts:

  • Aizvērt kanālu no vairākām gorutīnām vienlaicīgi bez papildu sinhronizācijas. Tas var novest pie panikas.
  • Aizvērt jau aizvērtu kanālu. Tas arī izraisīs paniku.
  • Sūtīt datus uz aizvērtu kanālu. Tas izraisīs paniku.
  • Gaidi lasījumu no nulles (neinitializēta) kanāla. Tas bloķēs gorutinu.
  • Gaidi rakstīšanu uz nulles (neinitializēta) kanāla. Tas bloķēs gorutinu.

Piemērs kanālu izmantošanai:

// Izveidot bezbuferu kanālu int
messages := make(chan int)

// Gorutīna datu sūtīšanai
go func() {
	messages <- 1 // Nosūtīt 1 uz kanāla
	messages <- 2 // Nosūtīt 2 uz kanāla
	close(messages) // Aizvērt kanālu pēc sūtīšanas
}()

// Datu lasīšana no kanāla
firstMessage := <-messages
secondMessage := <-messages

// Lasīšana no aizvērta kanāla atgriež null vērtību un ok=false
value, ok := <-messages