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