Sobes.tech
Middle

Mida saab ja mida mitte teha voogude turvalisusega kanalites Go-s?

sobes.tech AI

Vastus AI-lt

Võib:

  • Saata ja vastu võtta andmeid. Iga kanali lugemine ja kirjutamine on atomaarne operatsioon.
  • Kanalit sulgeda. Sulgemine näitab, et andmete saatmine on lõppenud.
  • Kasutada select operaatorit mitme kanali mitte-blokeerivaks suhtlemiseks.
  • Kasutada bufer- ja buferita kanaleid erinevate sünkroniseerimisskeemide jaoks.

Ei tohi:

  • Kanalit sulgeda mitme gorutini poolt samaaegselt ilma täiendava sünkronisatsioonita. See võib põhjustada paanikaga.
  • Sulgeda juba suletud kanalit. See põhjustab samuti paanikaga.
  • Saata andmeid suletud kanalile. See põhjustab paanikaga.
  • Oodata null-kanali (mitte-initsialiseeritud) lugemist. See blokeerib gorutina.
  • Oodata null-kanali (mitte-initsialiseeritud) kirjutamist. See blokeerib gorutina.

Näide kanalite kasutamisest:

// Loo buferita kanal int jaoks
messages := make(chan int)

// Gorutina andmete saatmiseks
go func() {
	messages <- 1 // Saata 1 kanalile
	messages <- 2 // Saata 2 kanalile
	close(messages) // Sulge kanal pärast saatmist
}()

// Loe andmeid kanalilt
firstMessage := <-messages
secondMessage := <-messages

// Sulgunud kanalilt lugemine tagastab nullväärtuse ja ok=false
value, ok := <-messages