Sobes.tech
Junior — Middle

Hogyan történik az adatok átvitele egy goroutine-ból egy pufferelt csatornába Go-ban?

sobes.tech MI

Válasz az MI-től

A Go nyelvben a gorutintól a bufferelt csatornára történő adatátvitel a küldési művelettel (chan <- value) történik. A bufferelt csatornának van egy belső, fix méretű puffere, amely lehetővé teszi a gorutinnak, hogy több értéket küldjön anélkül, hogy azonnal blokkolódna, ha a puffer nem tele van.

Példa:

ch := make(chan int, 3) // bufferelt csatorna 3-as mérettel

go func() {
    ch <- 1 // érték küldése a csatornára
    ch <- 2
    ch <- 3
    // ha a puffer tele van, a gorutina blokkolódik, amíg hely nem szabadul
}()

// adatok fogadása a csatornáról
for i := 0; i < 3; i++ {
    val := <-ch
    fmt.Println(val)
}

Ha a csatorna puffere nincs tele, a küldés azonnal megtörténik, és a gorutina folytatja a munkát. Ha a puffer tele van, a gorutina blokkolódik, amíg egy másik szál nem olvas adatokat a csatornáról és nem szabadít fel helyet a pufferen.