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.