Junior — Middle
Ako pravilno zaustaviti tekučo gorutino, če je potrebno, da se zaključi na temelju vanjskog signala ali pogoja, tudi če rezultat še ni dosežen?
sobes.tech AI
Odpoveď od AI
Pre správneho zastavenia bežiacej gorutiny na základe vonkajšieho signálu alebo podmienky v Go sa zvyčajne používajú kontext (context.Context) alebo kanály na prenos signálu zrušenia.
Príklad s použitím kontextu:
func worker(ctx context.Context) {
for {
select {
case <-ctx.Done():
// Prijatý signál zrušenia, ukončujeme gorutinu
return
default:
// Vykonávame prácu
}
}
}
func main() {
ctx, cancel := context.WithCancel(context.Background())
go worker(ctx)
// V určitom momente zavoláme cancel() na zastavenie gorutiny
cancel()
}
Tento prístup umožňuje gorutine pravidelne kontrolovať, či bol odoslaný signál na zastavenie, a správne sa ukončiť, aj keď výsledok ešte nebol získaný. Podobne možno použiť kanál na prenos signálu na zastavenie, ale context je idiomatickejší a pohodlnejší spôsob v Go.