Junior — Middle
Hogyan lehet helyesen leállítani egy futó goroutine-t, ha szükséges, hogy külső jel vagy feltétel alapján fejeződjön be, még akkor is, ha az eredmény még nem érkezett meg?
sobes.tech MI
Válasz az MI-től
A futó goroutine helyes leállításához külső jel vagy feltétel alapján általában a context (context.Context) vagy csatornák használata javasolt az leállítási jel továbbítására Go nyelvben.
Példa a context használatával:
func worker(ctx context.Context) {
for {
select {
case <-ctx.Done():
// Leállítási jel érkezett, a goroutine befejezése
return
default:
// Munka végrehajtása
}
}
}
func main() {
ctx, cancel := context.WithCancel(context.Background())
go worker(ctx)
// Egy időpontban meghívjuk a cancel() függvényt a goroutine leállításához
cancel()
}
Ez a megközelítés lehetővé teszi a goroutine számára, hogy rendszeresen ellenőrizze, nem érkezett-e leállási jel, és helyesen befejezze működését, még akkor is, ha az eredmény még nem érkezett meg. Hasonlóképpen, a leállási jel továbbítására használhatunk csatornát is, de a context idiomatikusabb és kényelmesebb módszer Go nyelvben.