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.