Junior — Middle
Jak správně zastavit běžící gorutinu, pokud je třeba, aby skončila na základě externího signálu nebo podmínky, i když výsledek ještě nebyl získán?
sobes.tech AI
Odpověď od AI
Pro správné ukončení běžící gorutiny na základě externího signálu nebo podmínky v jazyce Go se obvykle používají kontext (context.Context) nebo kanály pro přenos signálu zrušení.
Příklad s použitím kontextu:
func worker(ctx context.Context) {
for {
select {
case <-ctx.Done():
// Obdržen signál zrušení, ukončujeme gorutinu
return
default:
// Provádíme práci
}
}
}
func main() {
ctx, cancel := context.WithCancel(context.Background())
go worker(ctx)
// V určitém okamžiku zavoláme cancel() pro ukončení gorutiny
cancel()
}
Tento přístup umožňuje gorutinu pravidelně kontrolovat, zda byl odeslán signál ukončení, a správně se ukončit, i když výsledek ještě nebyl získán. Podobně lze použít kanál pro přenos signálu ukončení, ale context je idiomatickejší a pohodlnější způsob v jazyce Go.