Junior — Middle
Hogyan történik az adatok átvitele nem pufferelt csatornán keresztül?
sobes.tech MI
Válasz az MI-től
Go nyelvben a nem pufferelt csatorna (nem bufferelt csatorna) szinkron adatátvitelt biztosít a goroutine-ok között. Ez azt jelenti, hogy az érték küldése a csatornára blokkolódik, amíg egy másik goroutine nem fogadja el ezt az értéket a csatornából, és fordítva — a fogadás blokkolódik, amíg van érték olvasásra.
Így a nem pufferelt csatornán keresztüli adatátvitel a küldő és a fogadó szinkronizációjával történik, ami garantálja az adatok cseréjét közbenső tárolás nélkül.
Példa:
ch := make(chan int) // nem pufferelt csatorna
go func() {
ch <- 42 // küldés blokkolódik, amíg valaki nem olvassa
}()
value := <-ch // fogadás blokkolja a végrehajtást, amíg érték nem jelenik meg
fmt.Println(value) // kiírja, hogy 42
Ebben a példában a goroutine egy számot küld a csatornára, és blokkol, amíg a fő goroutine nem olvassa ki ezt a számot.