Junior — Middle
Hogyan valósítható meg több goroutine egymás utáni végrehajtása adatátvitellel közöttük?
sobes.tech MI
Válasz az MI-től
Go nyelvben több goroutine szekvenciális végrehajtásához és közötti adatátvitelhez a következő módszerek használhatók:
- Csatornák (channels) — a fő és legidiomatikusabb módja az adatok átadásának goroutine-ok között. Létrehozhatsz egy csatornát, amin keresztül az egyik goroutine adatokat küld, a következő fogadja és feldolgozza, majd továbbítja.
ch1 := make(chan int)
ch2 := make(chan int)
// Első goroutine
go func() {
ch1 <- 42 // adat küldése
}()
// Második goroutine
go func() {
val := <-ch1 // adat fogadása
ch2 <- val * 2
}()
// A fő goroutine megkapja az eredményt
result := <-ch2
fmt.Println(result) // 84
-
WaitGroup + csatornák — a goroutine-ok befejezésének és a szekvencia ellenőrzésére.
-
Adatok átadása lezárások vagy szinkronizált struktúrák segítségével — kevésbé elterjedt, de lehetséges.
-
A context (context.Context) használata — az életciklus és a törlések kezelésére, de nem közvetlen adatátvitelre.
A csatornák a legegyszerűbb és legmegbízhatóbb módja a szekvenciális feldolgozásnak, adatátvitellel goroutine-ok között.