Sobes.tech
Middle

Ką galima ir ko negalima daryti su srauto saugumu kanaluose Go?

sobes.tech AI

Atsakymas iš AI

Gali:

  • Siųsti ir gauti duomenis. Kiekvienas skaitymas ir rašymas į kanalą yra atominė operacija.
  • Uždaryti kanalą. Uždarymas signalizuoja, kad duomenų siuntimas baigtas.
  • Naudoti select operatorių neblokuojančiai sąveikai su keliais kanalais.
  • Naudoti buferinius ir nebūferinius kanalus skirtingiems sinchronizacijos scenarijams.

Negalima:

  • Uždaryti kanalą iš kelių gorutinių vienu metu be papildomos sinchronizacijos. Tai gali sukelti paniką.
  • Uždaryti jau uždarytą kanalą. Tai taip pat sukels paniką.
  • Siųsti duomenis į uždarytą kanalą. Tai sukels paniką.
  • Laukti skaitymo iš nulio (neinicijuoto) kanalo. Tai užblokuos gorutina.
  • Laukti rašymo į nulio (neinicijuotą) kanalą. Tai užblokuos gorutina.

Pavyzdys naudojant kanalus:

// Sukurti bebuferinį kanalą int
messages := make(chan int)

// Gorutina duomenų siuntimui
go func() {
	messages <- 1 // Siųsti 1 į kanalą
	messages <- 2 // Siųsti 2 į kanalą
	close(messages) // Uždaryti kanalą po siuntimo
}()

// Skaityti duomenis iš kanalo
firstMessage := <-messages
secondMessage := <-messages

// Skaitymas iš uždaryto kanalo grąžina nulines reikšmes ir ok=false
value, ok := <-messages