Junior — Middle
Ako sa vykonáva prenos dát cez nebufferovaný komunikačný kanál?
sobes.tech AI
Odpoveď od AI
Prenos dát cez nekapacitný kanál v Go prebieha synchronne: odosielateľ je zablokovaný, kým príjemca ne prečíta dáta, a naopak. To zabezpečuje priame synchronizáciu medzi gorutinami.
Príklad:
ch := make(chan int) // nekapacitný kanál
// Odosielateľ
go func() {
ch <- 42 // je zablokovaný, kým príjemca ne prečíta
}()
// Príjemca
val := <-ch // je zablokovaný, kým sa neobjaví hodnota
fmt.Println(val) // vypíše 42
Týmto spôsobom sú dáta prenášané priamo, bez medzičasového uloženia, čo zaručuje synchronizáciu medzi odosielateľom a príjemcom.