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.