Sobes.tech
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.