Sobes.tech
Junior — Middle

Ako sa zabezpečuje prenos dát cez nebufferovaný kanál?

sobes.tech AI

Odpoveď od AI

V jazyku Go zabezpečuje nezařazený kanál (bez bufferu) synchronizovaný přenos dat mezi gorutinami. To znamená, že odeslání hodnoty do kanálu se zablokuje, dokud jiná gorutina tuto hodnotu nepřijme, a naopak — příjem se zablokuje, dokud není k dispozici hodnota ke čtení.

Tímto způsobem probíhá přenos dat přes nezařazený kanál se synchronizací odesílatele a příjemce, což zaručuje výměnu dat bez mezilehlého ukládání.

Příklad:

ch := make(chan int) // nezařazený kanál

go func() {
    ch <- 42 // odeslání se zablokuje, dokud to někdo nepřečte
}()

value := <-ch // příjem zablokuje provádění, dokud se neobjeví hodnota
fmt.Println(value) // vypíše 42

V tomto příkladu gorutina odešle číslo do kanálu a zablokuje se, dokud hlavní gorutina toto číslo nečte.