Sobes.tech
Junior — Middle

Hogyan lehet helyesen leállítani a goroutine-ok futását a Go nyelvben a context segítségével?

sobes.tech MI

Válasz az MI-től

A Go nyelvben a goroutine-ok helyes leállításához gyakran használják a context csomagot. Létrehozunk egy leállítási lehetőséggel rendelkező kontextust (context.WithCancel), amit átadunk a goroutine-nak. A goroutine belsejében rendszeresen ellenőrizzük a kontextus állapotát a <-ctx.Done() segítségével. Amikor a leállítási függvényt meghívják, a Done() csatorna bezárul, és a goroutine helyesen befejeződik.

Példa:

func worker(ctx context.Context) {
    for {
        select {
        case <-ctx.Done():
            fmt.Println("Goroutine leállítva")
            return
        default:
            // munka végrehajtása
        }
    }
}

func main() {
    ctx, cancel := context.WithCancel(context.Background())
    go worker(ctx)

    // egy idő után leállítjuk a goroutine-t
    time.Sleep(time.Second)
    cancel()
    time.Sleep(time.Millisecond * 100) // hogy a goroutine befejeződhessen
}

Ez a megközelítés lehetővé teszi a goroutine-ok biztonságos és kontrollált leállítását anélkül, hogy veszélyes módszereket alkalmaznánk.