Junior — Middle
Jak je zajištěn přenos dat přes nebufferovaný komunikační kanál?
sobes.tech AI
Odpověď od AI
Přenos dat přes nekapacitní kanál v Go probíhá synchronně: odesílatel je zablokován, dokud příjemce ne přečte data, a naopak. To zajišťuje přímou synchronizaci mezi gorutinami.
Příklad:
ch := make(chan int) // nekapacitní kanál
// Odesílatel
go func() {
ch <- 42 // je zablokován, dokud příjemce ne přečte
}()
// Příjemce
val := <-ch // je zablokován, dokud se neobjeví hodnota
fmt.Println(val) // vypíše 42
Tímto způsobem jsou data přenášena přímo, bez mezilehlého uložení, což zaručuje synchronizaci mezi odesílatelem a příjemcem.