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

  1. 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
  1. WaitGroup + csatornák — a goroutine-ok befejezésének és a szekvencia ellenőrzésére.

  2. Adatok átadása lezárások vagy szinkronizált struktúrák segítségével — kevésbé elterjedt, de lehetséges.

  3. 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.